MacBrickout 4.0 Progress Log. Back when I was programming Sega
Saturn and Sony Playstation games,
one of my job duties entailed maintaining a "P3" report.
"P3" stood for Progress, Plans and
Problems. Once a week, we'd turn in our P3's which would give
managemt vital information on what
direction the project was taking. They could identify problems
quickly and intervene when necessary.
At the end of the week, I'd always find it hard to remember everything
I did over the past several
days, so I got in the habbit of logging down my tasks on a daily
basis. When I started working on
MacBrickout, I found it hard to break that habbit so here is a
fairly complete log detailing the
development of MacBrickout 4.0.
8-24-96 Initial concept
4-1-97 Initial Programming
Long break
10-12-97 Resumed programming. Rewrote everything. Now it's object
oriented! Started keeping a
log of my work.
10-15-97
Added preferences capability.
Added ASSERTS()
10-18-97
Cleaned up more code. Added prelim shadows to bricks. Implemented
textured bricks.
Smartened up the collision detection routines. If the intersection
between the ball
and a brick is a perfect square, the collision detection routines
decide the best angle
of deflection for the ball. Ran into a problem though. I need
to modify the code so that
it only processes the collision with the brick the ball is most
touching. Right now, if
the ball is simultaneously touching two bricks, both collisions
get processed and the ball
deflection angle is wrong.
10-24-97
Did some more code cleanup. Thinned out bricks.h. Made the ball
always green when it
starts out. Added a textID field to the Brick datastructure. Bill
Kelly came over and
converted the whole thing to C++. We were up until 5:30 in the
morning. Yikes! Now I'm
afraid to touch anything. I guess I need to start learning C++
now!
11-1-97
Added a vertical range for the paddle. Made the brick shadows
work correctly. Now when a
brick disappears, it doesn't mess up the brick next to it if it
or its shadow is overlapping
the other brick. Got DrawCells() working again.
11-2-97
Modified AddBrick() to include the shadow of a brick when it's
calculating the cellRange.
11-4-97
Tuned up the collision resolution. Now the ball bounces correctly
if it simultaneously
collides with two bricks. Also, in that case, only one brick will
disappear unless the
area of the intersection rectangles of the ball and each brick
is the same. If so, both
bricks will disappear.
11-5-97
Made it so if the ball lands precisely in the corner created by
two bricks situated
kitty-corner from each other, both bricks will disappear. Implemented
separate level
files. In addition, I added a default level folder select dialog
box. Once you pick
your default levels, it gets saved in the preferences. Added "New
Game" to the file
menu.
12-5-97
Made the bricks draw in front of the border. Cleaned up DrawBorder()
so that it takes
no arguments. Fixed a bug where level data was being used when
the game was resumed but
the level had been previously closed so the level data was invalid.
12-28-97
Made the game display a 640x480 window on a 1024x768 screen, preventing
the need to switch
the monitor into 640x480 resolution every time I compile and run.
Had to add the
SCREENWIDTH define in display.h. Added collisionRadius field to
the sourceImages data
structure. Came up with the "expanding brick" method
of detecting collisions between balls
and bricks.
1-1-98
Wrote 90% of the new brick/ball collision algorhythm. Will finish
it up tomorrow.
Put a delay in the code which sets the drawsprocket state to inactive.
This seems to
clear up a crash bug that occurs when it tries to restore the
display when you quit the
game. Got rid of a bunch of old collision code.
1-2-98
Came up with a "blow out the candles" bonus level idea.
Will implement it later... Fixed
the remaining ball/brick collision detection bugs. Gave the balls
three collision states
so that they can (a)destroy bricks, (b)merely bounce off of bricks
w/o destroying them, or
(c) go straight through bricks w/o affecting them or being affected.
Made ball move
slower if its collision is turned off. Essential for the start
of a level. Got
MacBrickout to load both old style levels and new style levels.
Got some of the level
editor working again (since the c++ overhaul). You can now add
and delete bricks as well
as drag them around. Made the menu bar appear and disappear appropriately
depending on the
positioning of the cursor.
1-3-98
Fixed a bug in the level editor where creating new bricks was
hosing up the linked lists
of bricks and eventually tripping an ASSERT. Decided I needed
to get some sort of font
going for the level editor (and for the rest of the game for that
matter) so I started
writing a simple font cutter tool to facilitate adding and modifying
fonts. Finished
the font cutter tool. It's actually pretty cool! The font cutter
tool now cuts a font
and saves it out as a 'font' resource in the MacBrickout app.
The width/height/offset
map is also saved out in the same 'font' resource. Coded up the
new text routines in
MacBrickout. They seem to work just fine. 3:00am. g'nite!
1-4-98
Modified the font cutter to run in an event loop. Now you can
specify which PICT
resource file you want to open. It makes a separate .map file
for each PICT file you
open. The .map file contains the width, height and offset information
for each character
you edit. Also, the tool now only saves out the data you've "stamped".
None of the
blank space between characters is saved. Modified MacBrickout
to handle the new font
data format. Cut a font and loaded it into the game. Created the
score bar. Made all
the info, Balls, Level, Mult and Score display properly.
1-5-98
Cleaned up some visual glitches. The score bar wasn't being drawn
at the start of a new
level, etc. Made the levels increment as you complete them. Made
the Mult not carry over
to the next level. Got the Balls counter working. Made passive
balls turn active if you
lose a ball and your ball's counter is already 0. Cleaned up all
of the messy flashing
when you first start up MacBrickout. Also cleaned up the flashing
when you select "new
game".
1-6-98
Got silver bricks working. Got gold bricks working. Made silver
bricks flash. Needs
some debugging and tuning up...
1-7-98
Made old style levels have shadows. It just fills in with a solid
dark color since there
is no shadow ppat data included with those old levels. Got the
flashing bricks totally
working. Just need to change the colors for the gold bricks.
1-8-98
Got scoring to work like the old MacBrickout. Bricks are worth
anywhere from 1 to 20
points depending on their height on the screen. The top bricks
are worth the most. Got
Starting X and Y positions of ball and Starting angle of ball
worked out for the old
style levels.
1-10-98
Messed with getting a linearly tracking mouse driver installed.
What a pain. I was
unable to get my 68000 based driver working on the PPC, nor was
I able to figure out how
to turn off the acceleration on the standard Apple mouse driver.
1-12-98
Started modifying the font cutter tool to also handle sprite animations.
Added the
OBJECT and ANIM LISTS menus. Made it possible to actually add
objects to the OBJECT
menu and name them.
1-17-98
Made a separate sprite cutter application project. It was getting
rather hairy trying to
make the font cutter also be a sprite cutter.
1-18-98
Made a lot of progress on the sprite cutter. Anim List menu is
now working. Sprite
frame numbers are displayed in the frame bboxes. You can delete
frames by hitting the
delete key. The tool keeps track of multiple objects and multiple
anim lists. You can
save and load the sprite map data.
1-19-98
Worked some more on the sprite cutter tool.
1-20-98
Got all the menus working perfectly. Added the close file option.
The screen goes black
when you close a file. Cleaned up a bunch of graphic glitches.
Still having some
problems with the menu bar getting partially erased. For now,
I'll keep it as a low
priority fix.
1-30-98
Installed some drop-in code that Kirk gave me. It replaces the
mouse's acceleration table
with a custom acceleration table. I can now effectively turn off
the mouse's acceleration.
Yay! I can't figure out which values to use to get the right speed
though. Right now
the paddle moves too slowly. Need to do some research on those
acceleration tables....
1-31-98
Worked on getting the sprite cutter tool to output object, animlist
and frame data. Also
got it to output a .h file that gets included into the MacBrickout
source code. the .h
file contains all the Object ID's so the code can refer to each
object by name.
2-1-98
Looks like I got the sprite cutter tool to output all the necessary
animation data correctly.
I won't know for sure until I try to use that data in MacBrickout.
My job now is to add
code to MacBrickout that will handle this new data and display
animated sprites on the
screen!
2-7-98
Got MacBrickout to read in all of the sprite bitmap data. It also
creates mask and inverse
mask data out of that data.
2-8-98
Got MacBrickout to correctly display all frames of animation after
reading in the bitmap
data. I cheated and wrote a simple loop to sequence through all
186 frames of animation.
Now I need to write the animation engine which will process the
anim lists created by the
offline sprite cutter. Got rid of texture.h, gfxobj.cpp and gfxobj.h.
A whole bunch of
code needed to be changed in order to remove those obsolete files
and incorporate the
offline sprite cutter data. Whew! It's starting to look like a
game again!
2-10-98
Got the animation engine almost totally working. All sprites show
up and animate correctly.
I just need to add a timing thing because they animate way too
quickly! Got the rest of
the code working again (I had to disable a lot of stuff when I
first started bringing up
the new animation engine).
2-11-98
Added the timing thing so the sprites don't animate so fast. Added
capsules.cpp and
capsules.h. Made it so bricks drop random capsules when they disappear.
Added the chaos
capsule. Changed the ball-in-sand artwork so that the sand isn't
part of the ball. This
looks a lot better when balls get lodged in the sand right next
to each other. Brought
over the MacBrickout 3.0 code that decides which capsules to drop
when.
2-16-98
Struggled with stupid C++ syntax errors. Didn't make any progress!
Argh!
2-17-98
Finally got my capsule module working. Now I'm off to tackle the
ball and paddle classes.
Cleaned up the ball and paddle classes. This triggered a domino
effect. I ended up going
through all of the source files, rearranging stuff and rewriting
a few things. The code
is a lot more C++ now. Boy, I'll be happy when I'm more comfortable
with this language!
2-18-98
Didn't get a chance to work on MacBrickout 4.0, but I finally
fixed the error -39 bug in
MacBrickout 3.1.1. Released version 3.1.2 and version 3.1.2 (Japan).
2-19-98
Figured out how to overload the new and delete operators. Implemented
a better sprite
memory management scheme. Now I can delete sprites! The sprites
are now in a linked list
instead of a linear array. Added priorities. When you add a sprite
to the display list,
the sprite manager inserts it into the list at the proper point
so that they sprites always
get drawn from lowest priority to highest priority. Right now,
I have it set to CAPSULE,
BALL, PADDLE so a ball will always be drawn in front of a capsule
and a paddle will always
get drawn in front of a ball and a capsule. Made the capsules
disappear when the paddle
collides with them. Made the capsules stop animating when they
hit the sand.
2-21-98
Implemented multiple stage up/down capsule functionality. Implemented
red-x capsule
functionality. Made capsules disappear 5 seconds after they land
in the sand.
2-22-98
Made the sprite cutter only save out unique frames. This cut about
6K off of the size
of the frame database. Added a whole project concept to the sprite
cutter. Now you can
open numerous PICT files which are contained inside one "project"
and cut sprites from
all of them. When you're all done, you can save out a database
of all the sprites. I
still need to write the code that will grok the project and build
one giant database...
2-23-98
Made sprite cutter spit out a correct objects.h file
2-24-98
Got the sprite cutter to spit out what seems to be a correct sprite
database. But for some
reason, MacBrickout's only displaying green balls and a few capsules.
Not all sprites are
appearing. 1:00am. Will figure it out tomorrow...
2-25-98
Ahhh. The anim list offsets weren't being calculated correctly.
Fixed the bug and now all
the sprites show up. Yay! Now I can have a bazillion animated
sprites in the game!!! Drat!
Now I need a way to loop, suspend and terminate animations. Started
programming some frame
attributes functionality into the sprite cutter. Added a FRAMES
menu. The correct number
of frames show up in that menu for each animlist of each object
selected. Made a dialog
box pop up when you select a frame from the frames menu.
2-26-98
Got the frame attributes dialog box functionality working. You
can click on the checkboxes
and enter data in the textEdit fields and it gets saved in the
sprite cutter data file.
Made that data get saved out in the MacBrickout database, but
I haven't tested it yet...
2-27-98
Fixed a bunch of bugs in the frame attributes data. Wrote the
code that digests the frame
attributes data (in MacBrickout). Cut some new sprites and got
them up on the screen
quickly. This sprite cutter's cool! The animation hotspots aren't
working. 2:25am. yawn.
I'll fix them tomorrow...
3-1-98
Got the hotspots working. Capsules now sink into the sand! Added
3-capsule functionality.
Added the slow and fast capsule functionality. Added catch capsule
functionality. Added
free ball capsule functionality. Added bubble artwork. Made bubbles
drift downward. Made
3rd bubble drift faster than the others. Added collision detection
between paddle and
bubbles. Added collision detection between balls and bubbles.
Made bubbles pop. Added
scoring for bubble popping. Made paddle lose catch ability if
it touches a bubble. Added
chaos capsule functionality. Made catch ability go away if you
lose a ball.
3-2-98
Made red X capsule fall from paddle when the redX situation is
remedied. Made placebo pill
not do anything. Added 6-capsule artwork. Added 6-capsule functionality.
3-3-98
Got resume game functionality working. Added DownUp capsule artwork.
Added DownUp capsule
functionality. Locked hidden cursor to paddle range area. That
way if you rolled all the
way up to the top of the mouse pad, then rolled back down, the
paddle would instantly start
moving back down. Before, the paddle would be stuck at the top
of its range until the
cursor caught up with it, then it would start moving down. Messed
around with the accel-
eration table some more. Made the ball change direction if it
doesn't hit anything for 8
seconds (which usually means it got stuck in a pattern bouncing
between gold bricks). Fixed
a bug in the sprite manager where it wasn't linking sprites into
the very first slot in the
display list (when the new sprite had a lower priority than the
existing sprite).
3-4-98
Made it so only one capsule can fall at a time. Added cBubble::Init()
and cCapsule::Init()
to init the static data members of those modules at the beginning
of a game.
3-8-98
Messed around with trying to get the paddle to shrink and expand.
Made a bunch of changes
to paddle.cpp but couldn't get anything to work. I'm probably
going to have to modify the
sprite manager to handle dynamically sized sprites...
3-9-98
Thought some more about what I need to do to handle a variable
sized paddle...
3-10-98
Added some flexibility to the cSprite::Draw() routine. Now it
can clip sprites in all dir-
ections. Not only does this add flexibility (I can have sprites
smoothly transition from
off-screen to on-screen instead of "popping" them on-screen
after they have moved enough to
be entirely drawn), but now I can have a growing and shrinking
paddle. If a sprite happens
to be entirely on screen, cSprite::Draw() will use a fast longword
blitting method. If the
sprite is clipped, it'll blit the sprite one byte at a time. Found
and fixed a bug with
the collision detection routine. After fixing that bug, another
one popped up. Now the
ball intermittantly goes through bricks w/o making them disappear.
Found the spot where
the collision resolution isn't being handled robustly. Will try
to fix, yawn, tomor....
3-11-98
Messed around with collision rectangles. Made no progress!
3-12-98
Fixed the bug with the collision resolution. Floats and Ints were
getting mixed and some
precision was getting lost. Fixed a bug where capsules stopped
spawning after having a
capsule fall from the paddle. Got the growing and shrinking paddle
working. Made some
significant changes to the paddle class. It's even more isolated
from the rest of the code
so I can now add multiple paddles and the rest of the code could
care less. Added a drop
queue for the capsules. When you lose powerups, they all fall
from your paddle.
3-13-98
Fixed some leftover bugs in the paddle width stuff. Made the upDown
paddle range have 4
stages instead of 3. Added clear capsule functionality. Made discarded
capsules (from
paddle) have a larger range of directions so they spread out more
if you have a lot of 'em.
Made capsules deflect off of walls. Implemented falling paddle.
Made capsules only fall
when 1 ball is on the screen. Capsules stop falling if more than
one ball is active. Made
a bunch of tweeks to game logic.
3-14-98
Modified the sprite clipping routines to clip sprites against
the sand surface. Now I don't
need unique frames to depict a sprite in the sand. And now ANYTHING
can land and sink into
the sand! Modified the bubble routines to make the bubbles sit
on the surface of the sand
for a little while before popping. Got all bubbles, paddles, capsules
and balls working
with sand collision. Took out all the anim lists of objects in
sand. Tightened up the
sprite cutter code by making it easier to delete anim lists and
objects. Made animList name
dialog box default to "norm" for the name. Brought laser
artwork into the game. Got laser
balls on screen. Got laser balls to circle around paddle. Got
laser balls to travel
upward when the mouse button was clicked. Got laser ball to brick
collisions working. Got
laser ball to bubble collisions working. Implemented laser disabling
functionality (dropping
laser capsules from paddle, etc.). Made lasers disable when you
finish a level, lose a
ball, or touch another bubble with the paddle. 2:00am. Gotta get
up in 4 hours.
3-15-98
Made it so if just one capsule is dropping from the paddle, it
always drops straight down.
The rest can drop at various angles. Made chaos capsules keep
animating when they hit the
sand. Fixed a bug where not all of the bricks were getting drawn
if the Button was held
down at the start of a new level. Converted the entire brick module
to C++. Whew! Rewrote
the collision detection routines. The balls are finally behaving
exactly how they should.
Got the sound working again.
3-17-98
The paddle didn't go all the way to the right wall. Fixed it.
Got shadows working for
the original 3.x levels. Added clipping functionality to the shadow
blitter.
3-18-98
Fixed a shadow bug with the paddle. Made MacBrickout work on systems
that can only display
resolutions larger than 640 x 480. Fixed some shadow problems
with the bricks. After
converting bricks.c to bricks.cpp, the ball forgot how to change
direction if it doesn't hit
a brick for 8 seconds. Fixed that problem. Made the bubbles rest
a little higher on the
surface of the sand.
3-19-98
Brought the code and data size of the brick module down from 60K
to 10K by removing the
static array declarations of type cBrick and using "new"
instead. Removed the static data
array declarations from my other modules too. This reduced the
size of the application by
about 100K! Removed the capsule's shadows when they hit the sand.
3-20-98
Fixed a bug where a clear capsule would drop from the paddle when
you caught a clear
capsule. Fixed a bug where the laser balls would slide off of
the paddle when the paddle
was on either edge of the screen. Fixed a bug where the ball velocity
would get out of
control when multiple gold bricks were hit towards the end of
a level.
3-22-98
Made the paddle start out a little wider. Put all of the sound
effects in the game. Got
sound code pretty much working. There still seems to be a little
glitch, so I'll have to
narrow it down later. Made the screen redraw itself so if a screen
saver kicks in, you'll
get your screen back when you touch the mouse. Made the paddle
start out a little narrower.
It was too wide.
3-25-98
Fixed a bug where the red paddle would turn gray if you popped
a bubble with it. Sped up
the gamma fade rate.
3-27-98
Fixed a bug where capsules lodged in the sand would still affect
powerups if the paddle
collided with them.
3-30-98
Made it so that caught balls can't penetrate walls (if you caught
them on the edge of the
paddle and tried to push them into a wall). Attempted to fix a
runaway sound bug (where
every sound in the game gets triggered), but decided that I was
going to rewrite the sound
driver to play continuous music so it wasn't worth trying to fix
a bug in code that was
going to become obsolete.
4-8-98
Played a game, witnessed a bug in the collision stuff. Jotted
down a musical brick idea.
Sigh. Time to get back into MacBrickout programming mode!
4-16-98
Started working on the 2D texture mapper. Wrote code to create
4 points that define the
rotated bounding box of a rotated sprite. Now I just need to fill
that box in with pixels.
4-18-98
Coded up the bilinear interpolation routines for the texture mapper.
Got the texture
mapper working. Now the sprites can rotate! This will be perfect
for the Umphees walking
across the sand. Added bilinear interpolation routines to shadow
code so sprite shadows
can rotate too.
4-21-98
Got the profiler working. Found that all of the MacBrickout code
is only taking 17% of the
total CPU time alloted. There's plenty of room to grow!
4-22-98
Started working on clipping rotated sprites to the screen. Got
rotated sprite clipping
working. Rewrote the sound driver to handle an arbitrary number
of channels of sound. I
picked 8 channels for now. There are some unwanted clicks and
pops in the sounds that I'll
need to debug tomorrow...
4-23-98
Found and fixed the click and pop bugs in the sound driver. The
sounds are sounding great!
And now I can play more than two at once!
4-25-98
Converted Sounds.c to Sounds.cpp. Added volume control and normal/wacky
functionality to
Options menu. Converted Preferences.c to Preferences.cpp. Made
it so sound volume setting
gets saved in preferences.
4-26-98
Added high score dialog. Added all support code to make that dialog
functional. Got most
of the multiple high score list functionality working. If several
people in the same
household play the same copy of MacBrickout, they will each be
able to have their own high
score list. An all-time high score list will display the best
scores from the other lists.
It's almost working right now, but it's still quite flakey. I
will have to finish
troubleshooting tomorrow.... yawn.
4-27-98
Got the high score stuff totally working. The all-time scores
list is functional. Coded
up a bunch of user interface stuff (like hiding the popup menus
-- both in the file menu
and the high score dialog box -- when there are less than 2 users).
4-28-98
Added game counter. Each score list has its own counter. Fixed
a bug where some of the
bricks in level 11 (3.0 level) weren't getting drawn.
5-2-98
Added preliminary umphees.
5-3-98
Fixed a bug where the shadows of some bricks on some levels would
show through the bricks.
Fixed a bug where catching a placebo capsule with a red paddle
would get you 25,000 points
but wouldn't disable the red-x status. The next capsule you caught
would give you another
25,000 points. Fixed a bug where it would always say you completed
level 1 in the high
scores dialog. Got Resume and End game working in the file menu.
Made the capsules rotate
at various speeds clockwise and counter-clockwise. Made the bonus
capsules give you 1000
points for catching them. Started border.cpp module. It looks
like I'm going to have to
write a tool to lay out borders....
5-9-98
Fixed some visual bugs that were caused by the new tiled borders.
Sped up the initial ball
speed slightly. Made it so if you have up/down ability, the capsules
fall faster. Slowed
down the amount the ball speeds up each time it hits the paddle.
5-13-98
Sped up the bubbles slightly. Messed around with the mouse acceleration
tables and got a
better "feel" for the paddle. Reset paddle X after LimitBoundsToPlayArea()
to keep paddle
from "sticking" to walls. Made free ball capsule disable
all clear stages and return the
ball to light green if it's caught.
5-25-98 - 6-1-98
Been trying to get the 68K version working. Got my IIci networked
to the 7100 to
facilitate the process.
6-1-98
Spent all day trying to come up with an elegant solution to the
bricks (that overlap the
border) taking chunks out of the border when they disappear. No
luck. Also worked on
a TV. Something wrong in the power supply (before the flyback).
Wasn't able to track it
down yet. Bah! Wasted day!
6-3-98
Ok, the border tiles are now stored in an array. GetPicture()
and DrawPicture() were just
too slow. Tomorrow, I'll work on reading just the data I need
out of the array to replace
the chunk of border that vanished when the overlapping brick disappeared.
6-4-98
Got the left border all cleaned up. Tomorrow, top and right borders...
6-5-98
Got right border almost cleaned up. There's still some residue
ONLY if a shadow passes
over the right border...
6-6-98
Got shadows working with old-style MacBrickout levels. All you
need to do is add a res-
ource with ID 1001 to the level file. Half of paddle's shadow
was offset vertically from
the other half when it hit the sand. Fixed it. Fixed a bug where
the right side of a
sprite's shadow had garbage in it when it was rotated a certain
direction. Added
juggling functionality.
6-7-98
Got sprite shadows to "bend" when they hit the right
border.
6-12-98
Fixed bug where bending shadows weren't working with balls. Added
GetUpDownRange() to
paddle.cpp. This was for the capsule::Init() to decide to have
capsules fall fast or
slow. Made jugglin bonus so it wouldn't double-trigger.
6-13-98
Broke the code in cBrick::Delete() that erases bricks from the
screen out into a separate
function: cBrick::Erase() since Delete() was starting to get too
large and unruley. Made
brick shadows bend on right wall. Finally fixed that TV from 6-1-98.
Bad diode in the
16V supply. Instead of having multipler reset at the end of a
level, I decided to keep
it like the old MacBrickout and carry it over to the next level.
6-26-98
Made the umphees rotate and move up and down on the sand dunes.
7-1-98
Drew a new umphee. Looks more like a roley-poley. Hmmm. Elizabeth
thinks it needs some
more work...
LONG BREAK!
8-3-98
I'm the proud father of a brand new baby daughter! Yay!
8-22-98
Fixed a bug where the ball would sometimes deflect at a funny
angle. The bug would only
happen when the ball hit two or more bricks at exactly the same
time. Fixed a bug where
if you paused the game with catch enabled (green paddle) and started
a new game, the paddle
would start out green instead of gray. Made it so in clear mode,
if you have catch and
lasers, the paddle is green with red laser balls. Also in clear
mode, I made it so that
capsules will continue to fall if more than one ball is on the
screen. Made the clear
mode local to each ball instead of global across all of the balls.
That way, you can find
yourself juggling a green ball, clear ball and yellow ball and
having to decide which one
you want to keep. I don't know if I like it. I'll have to play
around with it some more
and see how it plays....
8-23-98
I didn't like it. Switched the clear mode back to globally affecting
the balls.
8-24-98
Created a User:: class that keeps track of the frequent players.
This code was in the
Scores:: class but it no longer made sense to have it there. Now
I've got a ton of
compile errors! I will need to rewrite the User and Scores classes
so that they'll be
more friendly with each other.
8-26-98
Decided to display the level set in the high score dialog. That
way, people can see which
group of levels they played to achieve that particular high score.
I busted a bunch of
code out of scores.cpp and created user.cpp which will handle
managing everything to do
the different users or game players.
8-27-98
I QUIT MY JOB TODAY! Yikes. I'm hoping to be a stay-at-home dad,
work on MacBrickout and
do electronic repairs for people!
8-28-98
Fixed all the compile errors created from splitting scores.cpp
into user.cpp and scores.cpp.
Made it so if the person hits ERASE in the high scores dialog
and then selects a new user
from the popup menu, the scores they erased will remain erased.
8-29-98
I had moved the default level group folder into the userdata.
That way, when each user
starts a new game, it'll start up with their favorite levels.
This posed a problem in that
MacBrickout had no idea who was sitting at the computer until
the user selected "New Game".
The problem is, the user usually selects the level set BEFORE
starting a new game. I
moved the default level group out of the user data and back into
the preferences. Now there's
only one default level set. I figured it's no big deal to pick
a level group before
starting a new game if the current level group is undesirable.
Got the level group name to appear in the high score dialog. There
are still some wacky
glitches in the high score code that I'll need to address next...
8-30-98
Fixed the wacky glitches. Now I need to get the screen to redraw
correctly when recovering
from a screen saver interruption.
8-31-98
Got the high score dialog to recover from a screen saver. The
main game screen goes black
though. It doesn't look bad, but it does kind of bother me. I
would rather have the main
game screen recover correctly too. So far, I haven't figured out
how to do it. I'm tired
of working on high score stuff. I'll move on to something else
and maybe come back to this
later... Made MacBrickout redraw the level after the user selects
a new level group.
9-2-98
I was having problems with the cursor getting erased when the
screen redrew. As soon as you
touched the mouse, the cursor would reappear but it would cut
a rectangle out of the screen
where the cursor was. Fixed. Added "oh yeah" sound when
the multipler = 50. Added a
text-entry limiter in the high score dialog. Now it won't let
you type in a name that would
exceed the alloted space to display the name in the high score
dialog. Added a new function
called RestoreScreenFromUnderlay() which restores the screen when
you return to MacBrickout
after switching to some other application in the Finder. Wrote
a cool filter for the "You
got a high score!" dialog. It doesn't allow you to enter
more than 32 characters and also
limits you to the amount of space defined by the textEdit box
in that dialog. Got rid of
the erase button in the high score dialog. Made it so you can
option-click individual items
of the high score dialog to erase them. Option-click again to
unerase. Added haha feature.
9-4-98
Fixed a nasty bug in the sprite cutter where the loop command
wasn't accounting for the
existance of other anim commands in the anim list. The bug didn't
turn up until I inserted
a hold command for animation of the blinking warp button. Got
the blinking warp button
to appear in MacBrickout. The button looks too plain. I'll have
to figure out a way to
make it look better...
9-5-98
Made it so balls won't pop bubbles when they first start out until
they hit the paddle for the
first time.
9-6-98
Fixed a bug where a newly spawned sprite would get displayed before
all of its information
got filled in (Basically BlitSprites() was drawing it before AnimateSprites()
had a chance
to fill in its frame info). Put commas in the scores in the high
score dialog. The rate at
which the animations play back was driven by the screen refresh
rate. I changed it to go by
the global 60Hz ticks so the animation would play back at the
same speed no matter how fast
your screen refreshed.
9-9-98
Got rid of an annoying menu bar flash by changing the way the
screen gets redrawn when an
UpdateEvt happens. Fixed some bugs in the H.S. dialog where erasing
one line would wipe out
a row of pixels in the line above. Also changed the artwork in
the H.S. dialog.
9-16-98
I'm redoing how the border is drawn and processed. No more tiles.
Trashed border.cpp and
started over from scratch. Got the border drawn using the new
method. No sand yet. Fixed
a bug in the sound stuff where the sound volume would max out
every time you selected normal
or wacky from the sound menu.
9-17-98
Moved the border collision detection over to border.cpp (makes
sense huh?). Now anything
can collide with the border if it wants to (not just balls). Also,
paved the way to implement
warp tunnels.
9-18-98
Drew a cool warp tunnel animation. For the life of me, I couldn't
get it imported into the
game. The stupid sprite cutter kept crashing or corrupting the
data. I've had enough of
this! I'm rewriting it in C++!!!
9-19-98
Converted projectManager.c to projectManager.cpp
9-20-98
Created entity.cpp. An entity is an object such as a bubble, ball
or capsule. Each entity
can have a variable number of anim lists (bubble grow and undulate,
bubble pop, etc.) and
each anim list can have a variable number of frames. Added preliminary
functions: default
constructor, new and delete operators, Entity::Add(), Entity::GetCurrent(),
SetCurrent(),
SetName(), etc.
9-21-98
Made a lot of progress, adding to entity.cpp and rewriting spriteMaker.c
9-22-98
Ugh, I overcoded today. Spent the entire day working on the sprite
cutter. I couldn't even
say what the weather was like outside. Made a LOT of progress
but still not done...
9-23-98
Created utility.c and moved a bunch of routines in there. The
sprite cutter code is starting
to become a lot more organized! Another LONG full day of programming.
9-24-98
Got the sprite cutter pretty much done. It's a lot more flexible
than it was before and
NO CRASHES! Just a few cosmetic changes need to be made. Got the
new warp tunnel imported
into MacBrickout. I noticed the animation stutters when it loops
to the first frame.
Troubleshot, and noticed that the problem is in the animation
play back code, not the data
brought in from the sprite cutter. Fixed a bug in the animation
engine where it was playing
the "loop to" frame twice. Fixed a problem where the
sprite shadows that were turned off
(umphee, warp tunnel, etc.) would come back on when you resumed
a game.
9-25-98
Got the sand back. Fixed the garbage left on the right border
when a brick disappears.
Fixed a bug where the balls would disappear as soon as they hit
the sand. Fixed a bug where
the balls suddenly started off destroying bricks. It turned out
that the paddle bbox was
initialized incorrectly causing an instant collision with a ball
when it first appeared.
Fixed a crash bug where the top wall of the border wasn't being
redrawn correctly when an
overlapping brick disappeared. Discovered a few more bugs. Duooh!
9-26-98
Fixed a bug where falling capsules would go off the right side
of the screen instead of
bouncing off of the wall.
9-27-98
Fixed a bug where the sand was being drawn at the top of the underlay
screen. It would
show up only when objects passed over certain areas at the top
of the screen. Fixed a bug
where the paddle wouldn't sink into the sand when it fell. Whew.
I almost have all the bugs
on my bug list fixed. Soon, I'll be able to add more features!!!
9-29-98
Got basic warp tunnel functionality working. Still needs a few
touchups though...
9-30-98
Drew "Get Ready" text. Got basic functionality working.
10-1-98
Fine tuned "Get Ready" functionality. Made ball wait
until "Get Ready" fell into the sand.
Moved LaunchBall() into balls.cpp. Added "Game Over"
text. The white text looked kind of
drab so I colorized it. It now has a blue gradient at the top,
a green gradient at the bottom
with some funny looking "buildings" on the horizon.
Much more attractive to the eye! Added
"Paused" text. Made all objects halt when "Get
Ready" is displayed. It's still a little
weird so I'll do some more fine tuning tomorrow.
10-2-98
Made previous letters from "Get Ready" or "Paused"
disappear if more letters come up -- like
if you quickly and repeatedly pause and resume the game. Made
all active capsules permanently
disappear when you lose a ball. Made bubbles keep on floating
down when any Alpha Text is
on the screen (All other sprites except for the paddle freeze
while Alpha Text is on the
screen). Extended the length of time the bubbles remain in the
sand before they pop. Made
the paddle not expand from zero when resuming a paused game. Made
display shift down when
you pause or the game is over. That way, the score is not obscured
by the menu bar. Added
a bunch of different colored balls. Now I need to figure out what
they're all going to do!
10-4-98
Limited warp tunnel placement so it wouldn't be too high or too
low. Added closing warp
tunnel (left). Added artwork for right warp tunnel, not in game
yet... Fixed a bug where
sometimes, bricks would stop dropping capsules.
10-5-98
Got right warp tunnel working. Increased number of warp tunnels
to 2.
10-7-98
Added preferences dialog box. Added custom slider control CDEF
to preferences dialog. Got
slider (paddle speed) functionality working. Ahhh, finally got
the mouse acceleration tables
figured out. This problem had been bugging me since Janurary!
It turned out to be a bug
where the mouse acceleration tables weren't longword friendly.
In other words, the
structures are layed out in this fashion:
struct
{
long
short
long
}
The offset to the 2nd long isn't calculated correctly by the compiler
because it exists at
a non longword aligned address. Of course, these structures work
fine on the 68K which was
what was being used at the time the structures were designed.
10-8-98
Fixed a bug where the chaos capsule wouldn't give you any goodies.
Increased initial ball
speed. Also increased the effect of the fast and slow capsules.
Drew new warp tunnels.
Increased angle variance of ball when it goes for too long w/o
hitting any bricks. Made
warp tunnel (that you just warped through) persist to the next
level . You basically get
one chance to hit the ball through it again. If you miss, it vanishes.
Added the
AddScore() routine which gets called after you warp through a
tunnel. It takes care of
slowly incrementing the score and playing the ding ding ding sound.
10-9-98
Fixed a bug in the animation engine. When you called SetAnimList()
to change an animation
of a particular sprite, it would play the first frame of the new
animation twice! Added
ability for balls to start off with collision on or off. Made
ball stick solidly to the
paddle while caught. Before, it would drift from side to side,
lagging behind the paddle,
as you moved the paddle left and right. Made warp sound play when
you catch a warp capsule.
Only made paddle speed control appear in preferences dialog if
a 200dpi mouse is present.
Otherwise, it says "Fixed".
10-11-98
Level names are now displayed. Fixed a bug where catch wouldn't
persist to the next level.
Fixed problem with sprite shadows looking weird on the edges of
flashing bricks. Made
"Get Ready" text bounce a little before falling to the
sand.
10-12-98
Made screen scroll down when you pause (instead of popping down)
to show the score bar under
the menu bar. Had some problems getting it to scroll up. Posted
a help request on the Mac
Games Developer mailing list. Waiting for a reply. Implemented
beginner mode. The speed
of the ball is cut in half and the scoring is reduced by half.
Added sand.cpp. Drew sand
artwork. Now objects throw sand when they land. Fixed a bug where
the warp capsule would
never fall.
10-13-98
Made it so that any bricks that are in the middle of flashing
when GAME OVER happens, get
reset to normal appearance. That way, the screen won't show any
bricks stuck in "suspended
animation".
10-14-98
Got the screen to scroll back up properly when resuming a paused
game. Also made the
"Paused" graphic stay on screen while it scrolls. Removed
a bunch of obsolete code in
display.c (GraphicsDoUpdateEvent(), InvalidateContentRect()).
I was able to simplify some
other modules that called these functions. Now display.c has RedrawScreen()
that gets called
whenever the screen needs to be refreshed (like when returning
from a screen saver or when
a dialog box goes away).
10-15-98
Spent much of the day simplifying the code by putting a bunch
of tasks that used to be in
the main body of the code into the constructors of various classes.
Made it so capsules
won't get spawned from the very last brick in a level. This prevents
a capsule from briefly
appearing, then disappearing due to level completion.
10-16-98
Added ability to type in a code from the keyboard and MacBrickout
will recognize it. Added
Secret menu. Made Secret menu toggle on and off when you type
in the right code. Added
ability to advance or go back one level via the Secret menu. Added
ability to jump directly
to a particular level. Added command-key equivalents to the Player
popup menu. Now people
can just hit command-1 or command-2, etc. to start a new game.
Figured out how to get rid
of that annoying HELP menu that the System forces upon every application.
Removed command
keys when user list is displayed in Frequent Users dialog and
High Score dialog. Started
working on Remove User code.
10-17-98
Got the Remove User code working. Turned off the appropriate parts
of the dialog box when
there are no more remaining users to remove. Printed the user's
name in the sand only on the
first level. This is to help avoid accidently playing under someone
else's identity (it's
easy to accidently hit the wrong command key, play a whole game,
get a high score and then
find out it's going to get saved in someone else's high score
list!). Added TOOLS menu to
the menu bar. Started working on LevelEdit.cpp. Added 'NEW BRICK'
ability. Made it so you
can click on a brick and drag it to a new location. Made it so
the attributes (color, size,
etc.) of the last brick you touched are remembered. If you create
a new brick, it will be
created using those same attributes. Ran into a problem where
the menu bar would flash
annoyingly while using the level editor. This is because DrawSprocket
must be in a paused
mode to use the menu but must be in an Active mode to move sprites
around. The constant
switching between paused and active causes the menu bar to flash.
I need to figure out a
way to keep DrawSprocket in active mode but still allow the use
of the menus... Yawn. It's
late. I'll sleep on it...
10-18-98
It was getting ugly trying to let MacBrickout keep track of the
differences between the new
style levels and the old 3.0 style levels. I decided to make MacBrickout
only handle the new
levels. I've begun writing a level converter tool which updates
the old 3.0 levels into 4.0
levels.
10-19-98
Added the Finder Icons for the main application, saved levels
and preferences file. Did a
lot of work on the level converter tool.
10-20-98
Basic functionality of the level converter tool is complete. Got
MacBrickout to read in the
new level format. Ripped out all of the old level code from MacBrickout.
Got level converter
to convert the ppats from MacBrickout 3.0 into PICTS for MacBrickout
4.0. Made the tool save
out a darker version of the PICT for the shadow background.
10-21-98
Converted Level.c to Level.cpp. Got MacBrickout to display a full
screen PICT behind the
bricks. Looks pretty cool! It'll tile any size PICT so you can
have anything from small
repeating patterns to large full screen pictures as the background.
Eliminated a 300K buffer
that had become obsolete. I was originally using it to store the
font images but have since
found a more efficient way to do it. Reduced MacBrickout's memory
requirements from 4.5 megs
to 4.0 megs. I'm hoping to get it down to 3500K.
10-22-98
Learned how to use the List manager today. Also learned how to
scan a directory for a par-
ticular type of file. With this newfound knowledge, I added an
Arrange Levels dialog box
to the level editor. It displays the filenames (in a list) of
all the MacBrickout 4.0 levels
in the default level folder. Made it so that when you double-click
on one of the names in
the list, it draws a miniature picture of the level to the right.
Got multicolor flashing
bricks working. Each time you hit the brick, it changes to a different
color. The flashing
bricks were too easy to destroy when hit rapidly by a bouncing
ball. Made it so a brick
has to wait until it stops flashing before it flashes again (and
decrements numHits). Oh
yeah. Started out with Arrange Levels in the Tools menu, but moved
it over to the SECRET
menu. Added an ability to me level converter tool to convert all
the levels in a folder (so
you don't have to manually convert one at a time).
10-23-98
Somewhere along the line, the falling paddle (when the paddle
gets too wide) stopped working.
Fixed that problem. Also fixed a collision problem when the paddle
is very narrow. It was
falsely detecting collisions with capsules and bubbles. Added
blue ball functionality.
Added level map file to level folder. This tells MacBrickout what
order the levels go in.
Finished the Arrange levels functionality. You can shift levels
up and down in the list and
save the list out in the level map file. MacBrickout will then
read the level map file in
and play back the levels in the specified order.
10-24-98
Added the no high score alert which informs the player that they
can't save a high score if
they didn't start from level 1. Added dark diagonal definition
line in upper left corner of
border. Added ability to use up and down arrow keys in the Arrange
Levels dialog box. Put
in a bunch of error handling code. Yuck. If an error happens,
MacBrickout will display an
Alert with a text string describing the error and the actual error
number. If an unrecognized
error occurs, MacBrickout will display a generic error string
with the error number.
10-25-98
Got the ball speedup functionality working (when you approach
the end of a level). Added
embossed outline around scores in high score dialog. Looks a lot
better than just a plain
window.
10-26-98
Fixed a bug where the ball wouldn't change directions (when not
hitting anything for a while)
whenever you had catch ability (paddle is green).
10-27-98
Added red ball functionality. Got rid of blue ball. It was too
hard to see. Switched blue
ball functionality over to light blue ball. Drew artwork for bomb
ball. Added bomb ball
functionality. There are still some issues with the bomb ball
that need to be cleared up.
Figured out a hack to make the menu bar not flash when pausing
and resuming DrawSprocket.
I basically patched the FillRgn() and EraseRect() routines to
do nothing, then restored those
routines after making the DrawSprocket call.
10-28-98
Finished the Bomb Ball functionality. Added date to high scores.
Slowed down the ball
speedup amount slightly when it hits the paddle.
10-29-98
Added bitfields to bricks so the bricks can specify which capsules
can fall.
10-30-98
Changed the cCapsule::Spawn() routine to recognize the capsule
bitfields. Now, it will only
spawn capsules whose bits are turned on. Changed the artwork for
the down/up capsule. Now
it's black with red arrows (instead of red with black arrows).
Figured out how to do animated
and transparent GIFs. Updated my web page with some new cool graphics.
11-1-98
Made MacBrickout automatically find the default level folder the
first time it's started up
on a fresh machine. Made MacBrickout attempt to create its preferences
file inside the
MacBrickout folder. If unsuccessful (like if MacBrickout is on
a locked volume such as a CD
Rom), it creates the preferences file inside the Preferences folder.
This is cool in that
MacBrickout won't clutter up the preferences folder if possible.
Put menu bar "de-flashing"
hack in display.c so anytime the display context goes active or
inactive, the menu bar won't
flash.
11-2-98
Dimmed the secret menu when a new game was started (instead of
dimming each item of the menu).
This simplified the code a bit. Started working on the rectangle
dragging and group selection
code in the level editor.
11-3-98
Got all the brick selection, grouping and dragging code working
for the level editor. Whew!
Added "Select All" ability. Added delete ability --
Any selected bricks go away when you hit
the delete key.
11-4-98
Added the "Add Row" functionality. Added "Duplicate
Selection" functionality. Added Brick
Attributes dialog box and most of its functionality. Right now,
all attributes get applied
to every brick in a selected group. There is no way to change
just the color of all the
bricks in the group without affecting which capsules they can
drop or their Texture ID. I'll
need to change this. I'll probably add more checkboxes to the
dialog so the user can select
which attributes they wish to be applied to the group of bricks.
Made certain items of the
tools menu dim when they weren't logically usable.
11-5-98
Added checkboxes to disable certain groups of brick attributes
when you have more than one
brick selected. This way, you can change the color of a group
of bricks without affecting
which capsules they drop. Fixed a bug in the Level::PaintBackground()
routine where it would
crash if you gave it a rectangle that was outside of the area
on the screen where the background
was. Fixed a bug where the right border didn't get drawn correctly
in some cases. Added
the ability to option-click a brick to complete replace all of
its attributes with the
attributes of the last selected brick. Figured out a way to make
the cursor stay visible
while option-dragging or shift-dragging over bricks. The brict
attributes editor is now
complete and fully functional! Yay!
11-6-98
MacBrickout now gets the monitor's frame rate from DrawSprocket
and adjusts the sprite's
velocities accordingly. That way, the sprites won't be lightning
fast on monitors with high
refresh rates. Got the "Place Ball" functionality working.
Added the ball attributes
dialog and got all of its functionality working. Made it so you
can't have bricks and balls
selected at the same time. Made it so when you hit command-i (attributes),
it brings up the
appropriate dialog box depending on if you have a brick or a ball
selected.
11-7-98
Made the bomb ball destroy the gold bricks. Ran into a problem
if you had lasers, then caught
a 3-capsule. Most likely, you already had the mouse button down
because you were firing the
lasers. If the 3-capsule spawned any bomb balls, they would go
off immediately and you would
feel robbed. Fixed it. Made the ball start off at a normal speed
if the slow pill was
activated. Otherwise, it starts off at a slow speed until it hits
the paddle.
11-8-98
Got most of the "set background pattern" functionality
working. Right now, it only reads in
PICT files. I'd like it to read PICT resources too. Up until now,
a brick's shadow would
disappear once you've dragged it. That is now fixed. Works when
you drag a whole group of
bricks too. Added progress bar to "Set Background Pattern"
when it has to calculate a dark
shadow for a very large pict.
11-9-98
Fixed a slight problem where the progress bar would overshoot
by a few pixels. Got the
entire Custom-User-Select-Picture dialog box working. Now the
user can choose between PICT
files and PICT resources. I needed to add the PICT resource option
so people could load
backgrounds out of other level files. Made it so you can click
on a filename and it will
draw a picture in the upper-right corner of the dialog box. Added
Level Name dialog and
functionality. Got rid of most of the menu bar quags in the level
editor. Now, for the most
part, the menu bar stays on. Fixed a problem where if you option-dragged
a normal brick
onto a gold or gray brick, the gold or gray brick would keep its
metalic 3D edges.
11-10-98
Rewrote the sand drawing code. It used to redraw all of the sand
when any part of got obscured.
Now it just draws the portion that got uncovered. Also, I had
allocated a huge 640x480 block
of RAM to hold the sand (taking 300K). Now it only takes up 20K
of ram. I was able to
reduce MacBrickout's memory requirements to 3500K. Changed the
Level datastructure to handle
more than one initial ball. Modified the level converter tool
to output the new datastructure.
Modified level.cpp to correctly read the new format. Tested. Works
ok! Got preliminary
save level functionality working. The Levl data gets saved but
not the background PICT info
yet. Started working on the code that converts the background
pattern in the game back into
a PICT resource for saving into a new level.
11-11-98
Finished the level save capability! Yay! Now I can start making
new, exciting levels.
Added the ability to start a level off with more than one ball.
Needed to make some major
changes to the datastructures to accomodate this new ability.
11-12-98
11-13-98
11-14-98 took a break.
11-15-98
11-16-98
Spent all day getting the levels to load and save multiple balls.
This job is turning out to
be more complicated than I expected.
11-17-98
Got balls that don't kill bricks working again. Created a few
test levels to test out some
ideas. Fixed a bunch of glitches in the level editor having to
do with saving levels that
contain more than one ball. Finally got multiple balled levels
loading and saving correctly.
11-18-98
Added color.cpp. Got marching ants working in level editor selection
tools. Made it so you
can move a selection one pixel at a time by using the arrow keys.
Made it so that passive
balls keep moving even if you've caught an active ball. Added
center selection ability to
level editor.
11-19-98
Made it so the drag rectangle in the level editor stays within
the walls. Changed the
dirty rect grid size (in drawsprocket) so that the menu bar doesn't
get partially erased
when you drag something near the top of the screen in the level
editor. Fixed a bug where if
you set a brick to drop a warp capsule in the level editor, it
would drop a ball instead!
Fixed a bug where the capsules you selected in the level editor
didn't corespond to the
capsules that actually fell. Fixed it so warp tunnels won't appear
on top of each other.
Drew fruit capsule artwork. Drew 16 fruits and vegetables. Added
fruit capsule to game.
Added fruit capsule checkbox and functionality to level editor.
Added fruit menu. Made
fruit menu functional. Now you can select fruit from the menu
and drag/place them anywhere.
Modified the level datastructure to handle fruit. Updated the
level converter tool to handle
the new datastructure. Ran a new batch of levels.
11-20-98
Made it so the fruit gets saved out with the level. Made it so
that when a level is loaded,
the fruit gets loaded, placed and displayed in the correct position.
Added collision det-
ection between fruits and balls. Made fruits fall when hit. Added
collision between fruits
and sand. Added collision between fruits and paddle. Added code
to stamp fruit image onto
border. Added fruit capsule functionality (turns all fruits on
when caught).
11-21-98
Had a nice weekend getaway in Carlsbad.
11-22-98
Made it so the fruit achievements get saved with the user. If
the user ever wants to reset
their achievements, they can hold down the option key when starting
a new game. Took shadows
away from the sand sprites. They look a lot better that way. Finally
fixed garbage left in
score bar by commas. Added brick sizing capability in level editor
(hold shift key down
while using arrow keys). Made bricks with AlwaysDrop turned on
drop a capsule even if more
than one ball is on the screen.
11-23-98
Discovered a problem with the fruit. If the user plays a different
level set, all of his
fruit accumulations still show up from the previous level set.
Each user needs to have a
unique list of fruit for each level set. I decided to save the
fruit accumulations out into
the map file of each level set. Got the fruit lists saved out
in the map file of the level
set. Wrote code to automatically delete bogus fruit lists out
of the map file (lists that
belong to users that don't exist on this machine). Messed around
with the sand artwork
some more. Drew preliminary teleport artwork. Added teleport.cpp.
Spawned a couple of
teleporters. Hmmm.... Made it so you can't command-I on a fruit
in the level editor.
11-24-98
Made it so you can't pick a new default folder while a game is
in progress. There is now a
MacBrickout folder in the preferences folder. I did this because
there is now the possibility
of having mutiple preference files --> If MacBrickout exists
on a CD rom, it is impossible
to modify the level map file contained in the level sets on the
CD rom. Therefore, it is
impossible to modify the user's fruit status. So now, if MacBrickout
is unable to write to
a level map file, it will create the necessary files inside the
MacBrickout folder inside
the preferences folder.
11-25-98
Majorly rewrote preferences.cpp and file.c. Now MacBrickout will
behave properly when launched
from a CD Rom. If launched from a hard drive, MacBrickout will
create its preferences inside
the MacBrickout folder. All "Level Map" modifications
take place inside the respective
level set folders. If launched from a CD ROM, the preferences
and level map files exist
in the Preferences folder instead (where they can be modified).
File management error handling
is annoying!
11-26-98
Thanksgiving day! Fixed a problem where beginner mode stopped
working.
11-27-98
Wrote temp code to convert a 24-bit pict of the sand into an 8-bit
pict of the sand w/o
losing any picture quality. This decreased the size of the MacBrickout
application by about
50K. Made it so you can't log a high score if your score is zero.
Fixed a bug where a level
would start out with 2 balls if you finished the previous level
by exploding a bomb ball on
the very last brick. Took a bunch of code out of MacBrickout.c
and created ArrangeLevels.cpp.
Made it so if you're not saving a level over itself, it brings
up the ArrangeLevels dialog
box. Fixed an error -47 bug that would sometimes pop up when trying
to save a level over
itself. Added the help dialog box and functionality. Added registration
form dialog box
and functionality.
11-28-98
Added registration number code. Fixed a collision problem where
the ball would sometimes
do a 180 when it hit the top of 2 horizontally adjacent bricks.
Fixed a bug where the
angle deviation of the ball wasn't working. Fixed a problem where
the shadows of adjacent
bricks would interfere with flashing bricks causing distracting
little graphic glitches to
appear.
11-30-98
Made it so that only certain capsules and balls are available
in the unregistered version.
Took pearl ball out of the lineup since it's going to be a very
special ball.
12-1-98
Elizabeth said that I shouldn't have the same old laser that 3.0
had. She convinced me that
people need a new, improved laser. So.... I spent all day making
a new laser paddle. Got
new laser paddle artwork and functionality into the game. Getting
quad laser balls is
pretty cool but it's almost too easy. Since quad lasers allow
you to blast through a level
pretty quickly, I'm going to need to think of a way to make that
ability harder to get...
The level editor would leave a little garbage on the screen left
over from creating the shadow
background PICT. Fixed it.
12-2-98
Added teleporters to level editor. Still need to add the ability
to set links. Made it so
teleporters get saved out in levels. Made the game read the teleporters
out of the levels
and display them on the screen.
12-3-98
Made it so the user can copy text out of the help dialog to the
clipBoard. I enabled auto-
scrolling so the user can click and drag to select a whole bunch
of text. The problem is,
it wouldn't update the scroll bar. I couldn't find anything in
the textEdit record that
would tell me where the text had scrolled to. As a result, I had
no idea where to position
the scroll bar after the user selected a large block of text.
It looks like I need to write
a custom clickLoop routine to scroll the text and update the scroll
bar. For now, I'll just
disable automatic scrolling.
12-4-98
Made it so the game counter only shows up in the registered version.
Got teleporters totally
working. That includes the attributes dialog box in the level
editor. You can set which
teleporter each teleporter warps to. You can also set the angle
the object will travel once
it leaves the teleporter. Got random teleporters working. Added
smoke.cpp. Since I don't
have smoke artwork yet, I decided to use the bomb-ball explode
artwork. As a test, I made
the ball eminate 10 smoke clouds (bomb ball explosions) after
hitting the paddle. VERY COOL!
Made teleporter (with random setting) not warp to itself. It was
looking like the collision
detection wasn't working but really the teleporter was just warping
to itself. You can now
specify a random angle for the teleporter. Basically, any angle
> 359 is random. Had to add
another custom dialog filter to monitor the angle input from the
keyboard so the "Random"
message can appear and disappear at the appropriate times.
12-5-98
Drew new artwork for teleporters (brown ring with colorful sparklies
inside). Messed around
with the mouse acceleration tables again because the paddle just
didn't "feel" right. I
think I got it dialed in this time.
12-6-98
Fixed a bug where the ball attribute, "Collision-on-but-don't-kill-bricks",
wasn't working.
Made it so lasers can go through the teleporters. Made it so fruit
explode if you hit them
with the lasers. I'm getting concerned. I'm starting to see the
frame rate chunder when a
lot of objects get on the screen. Especially rotating objects.
I'll probably need to speed
up my bilinear texture interpolation routine at some point. Ick.
Drew smoke artwork and
added smoke functionality to teleporters. Looks cool!
12-7-98
Made the sprite cutter tool optimize out duplicate frames. This
cut about 6K out of the
data size. Fixed a problem where the color picker dialog in the
level editor was modifying
the ctSeed field of the front graphics buffer. This would cause
subsequent calls to
CopyBits() to be VERY slow. Fixed a problem where MacBrickout
wouldn't acknoledge new level
files dropped into the default level folder by the user. Made
teleporters work on passive
balls. I investigated having textured bricks but I think I'm going
to kill that idea. I
think the look of textured bricks on a textured background would
be too distracting. Also,
it poses a memory issue because I would have to keep all of those
textures in RAM at runtime.
Made it so fruit can pass through teleporters. Made it so capsules
can pass through the
teleporters. I think I'm going to make the bubbles immune to the
teleporters (they're so
light, the teleporters can't detect their presence).
12-8-98
Decided to change the way the high scores were stored. Originally,
there was only one high
score resource and I displayed the level group along with the
score in the high score dialog.
I changed it so that there is now a separate high score resource
for each level group. That
way, a user can see his top 10 scores on "3.0 Levels",
and then switch to "Standard Levels"
and see his top 10 scores there. It just made more sense to store
the scores this way. Got
quad laser functionality working. Drew 500 bonus artwork. Added
500 point bonus for
catching fruit. Made the smoke engine handle the 500 bonus artwork.
LONG BREAK!
1-28-99
After a long (much needed) break, I decided to get back into programming
mode. I'm going to
hold off on the sprite blitter optimizations for now.
1-31-99
Made it so the original level gets redrawn when you cancel out
of the level editor. Added
caged ball functionality. You draw a box around the ball in the
level editor. If the ball
ever leaves that box, it becomes an active ball (collision is
turned on). Added time delay
when you lose a ball so caged ball has time to break free.
2-2-99
Fixed a bug where the menu bar would disappear when you switched
to another application and
then back to MacBrickout.
2-3-99
Fixed the rest of the menu bar glitches when you switched to another
application and
then back to MacBrickout. Tossed around a few ideas for level
1. It's important that this
level be visually appealing since it's the one level that everybody
who plays MacBrickout is
guaranteed to see.
2-7-99
Got rid of only being able to select one sprite at a time in the
level editor. Now you can
drag a whole group of objects (sprites, bricks, whatever). Kind
of opened up a can of worms.
Now I need to modify the Ball Attributes and Teleporter Attributes
dialog boxes so that the
user can select which attributes to apply to the whole group (if
more than one object is
selected). Added checkboxes to ball attributes dialog box. Added
functionality to check-
boxes.
2-9-99
Added a scroll bar to the comments field of the registration form.
It's still very glitchy.
Posted a help question on the Mac Games Dev mailing list. Waiting
for a reply...
2-10-99
Started working on musical bricks. Redesigned the brick attributes
dialog box to accomodate
the musical bricks.
2-11-99
Learned about the Code Fragment Manager. Using CFM, I made MacBrickout
display a friendlier
message when someone tries to run it without DrawSprocketLib.
I got LeapfrogSW.com today!
Yay! I moved my web page over there and created a simple "I've
moved" web page for the old
AOL location. Added the "show musical bricks" menu item
to the tools menu. Doesn't work
yet. Added "Gold" and "Gray" buttons to the
brick attributes dialog box. Added functionality
to "Gold" button.
2-14-99
Added new "About MacBrickout" picture. Got "Show
Musical Bricks" functionality working in
the level editor.
2-15-99
Added prizes for musical bricks in brick attributes dialog box.
Added fields to the brick
datastructure to accomodate the prizes. Reconverted the original
3.0 levels. Stored the
appropriate data in the coresponding bricks when the user makes
selections from the prize
popup menus. Made the musical bricks spawn the various prizes
you pick in the level editor.
At game over, you'd see the level you finished with but if you
selected "Edit" from the
secret menu, you'd always end up editing level 1. Fixed it.
2-16-99
Sampled and added ARGH1, ARGH2, FRUITHIT, HS1, HS2, HITSAND, JUGGLIN2,
TELEPORTER, THUH,
UMPHEE, CATCHFRUIT and UNUPDOWN sounds. Made warp tunnels play
ARGH sounds when you miss
them.
2-17-99
Started designing how I'm going to implement bonus levels. The
original MacBrickout's bonus
levels were hard coded. This made it impossible for the user to
create their own bonus
levels. I would like MacBrickout 4.0 to posess the ability to
create bonus levels from the
level editor. I will probably add another menu to the menu bar
which contains special bonus
level tools. Some of the new sounds were too quiet so I amplified
them a tad. Made the
ARGH sound play 1/4 second after the ball leaves the warp tunnel
(to allow for human brain
processing). Now the sound plays right about the time you want
to say "Argh!" Started to
change the "Jump to level" dialog box to contain a popup
menu with a list of the levels.
This will be easier than having the user type in a level number
(when there is no easy way
to tell what number coresponds to which level). I need to figure
out how I'm going to store
the bonus levels though, before I can revamp the jump-to-level
dialog box. I feel I'm
getting ready to open a BIG can of worms...
2-18-99
Accidentally stumbled across a bug in the preferences code where
it would sometimes fail
to create a preferences file in the system folder. It was because
I had a dirID assigned to
a tS16 instead of a tS32. When the level map file exists on a
locked volume (like a CD rom),
MacBrickout has to create one in the preferences folder. Modified
file.c so that it would
copy the entire file from the CD rom to the preferences folder
(instead of copying individual
resources. It was getting tedious to modify the code every time
I added a resource). Made
it so that if a ball missed a warp tunnel, then a split second
later it went in, the ARGH
sound wouldn't play from the first collision. OK. Bonus levels
are differentiated by a
filetype of 'BLEV'. Modified the ArrangeLevels dialog box to include
a "show bonus levels"
checkbox. Modified tons of code that dealt with the level map
file. The code now stores
bonus levels in a different 'Map ' resource. Made the ArrangeLevels
dialog box generate a
fresh list of the appropriate levels when you click on the checkbox.
Added "Bonus Level"
menuItem to the Tools menu.
2-19-99
Cancel button in Arrange Levels dialog box didn't really cancel.
The problem was when you
switched from main levels to bonus levels, it would save your
main level arrangement. I now
maintain two seperate lists and don't save either of them unless
you hit the OK button.
Whew! Got the Jump-to-level dialog box entirely working. Made
it so that if you start from
a bonus level, the game ends as soon as you complete the level.
Added the happy capsule
graphic. Added happy capsule functionality to level editor (brick
attributes dialog box).
Added bonus level functionality --> Can't lose balls in bonus
levels. Need to resume normal
levels once bonus tries is depleted. Etc. Made bonus capsules
fall from paddle when you
lose your ball on a normal level. Added Bonus Menu. Made Bonus
Menu appear and disappear
when you select or deselect the "Bonus Level" menu item.
Found and fixed a bug where a level
map file wouldn't get created if you saved a level into a brand
new directory. Made it so
"Bonus Level" gets checked in the tools menu and the
bonus menu appears when you edit a bonus
level. Made it so that if a screen saver kicks in while the arrange
levels dialog box is
being displayed, the correct level picture will be drawn when
the screen saver goes away.
Made different juggling music play when your juggle count gets
to 40. Also, the score goes
up by 100 instead of 50.
2-21-99
Added Ahhhhh sound. Fixed a bug in the capsule spawning code that
would sometimes spawn a
capsule with an illegal animList. Fixed a bug where the correct
picture wouldn't get drawn
in the Arrange Levels dialog box after you moved the levels around.
Made it so when you
duplicate a brick group, the newly formed bricks won't materialize
out of bounds.
2=22=99
Decided that floats (although quite accurate) were too slow when
trying to convert back and
forth between them and integers. Changed the whole project over
to using 16.16 fixed numbers.
Got almost everything working again -- brick collisions are still
hosed. Big yawn. I'm
seeing doubbllee. 3:00am. G'nite!
2-23-99
Fixed the brick collisions. Found and fixed numerous small bugs
relating to the switchover
from floating point to fixed point. Did some profiles. I got a
significant speed increase
in my code performance! Yay! Found and fixed a bug where MacBrickout
was causing other
applications in the background to crash with bus errors. It turned
out to be a bogus address
calculation for the brick shadows that crawl up the right side
of the screen. I had one too
many INTtoFIXED() macros in there. The capsule prize popup menu
stopped working in the brick
attributes dialog box. Fixed it by not loading that menu up at
MenuInit time. Weird.
Dialog popup menus are weird.
2-24-99
Oops. Missed a Fixed point conversion. Growing paddle didn't fall
to sand. Fixed.
Extended the level datastructure to hold the new bonus level flags
/ attributes. Added
No Bubbles functionality to BONUS menu. Added Full Paddle Range
functionality to the BONUS
menu.
2-25-99
Added Can't-touch-walls bonus level and level editing functionality.
Added time limit
functionality to level editor and bonus levels.
2-26-99
Added "add-5-to-timer" functionality. Making the checkbox
appear at the right time in the
brick attributes dialog box was tricky! Took the "Edit..."
text out of the SECRET menu.
Added an Edit... button to the jump to level dialog box.
2-27-99
Did electronic repairs all day.
2-28-99
Fixed a bug where a new ball would start off much slower than
the ball you just lost. Made
it so the can't save high score message (when you've jumped to
a level) only gets displayed
if your score could have been entered on the list. Made the HighScore2
music only play if
HighScore1 music played first. Fixed a bug where if the paddle
touched a light blue ball
that was lodged in the sand, it would switch to dropping 6 capsules
instead of 3 capsules.
It should only drop 6 capsules if the light blue ball is in play.
Made bomb ball explode
even when it's lodged in the sand. Got an idea to make a black
singe mark in the sand after
the bomb ball explodes...
3-1-99
Added fixed vertical positioning to paddle for certain bonus levels.
Made it so respawned
warp tunnels won't keep reappearing level to level. They only
get respawned once. This was
to keep someone with catch and a low (in reach) warp tunnel from
warping straight through the
game all the way to the ending. Made bomb balls kick up a bunch
of sand when they're lodged
in the sand and you blow them up.
3-2-99
Learned how to use Navigation Services. Implemented Navigation
Services for MacBrickout's
"Select Default Folder" option. If Navigation Services
isn't available, MacBrickout uses
StandardGetFile() instead. Got Nav Services working for the "Save
Level" portion of the
game. Ran into a problem where the game crashes (yikes! A crash
bug!) when you try to save
a level over itself. The crash doesn't happen until after the
save has long been completed
and an updateEvent occurs. I believe NavServices caused memory
to get moved around and
there's probably some code somewhere else that's assuming that
memory hasn't changed.
Changed "Jump to Level..." (in the SECRET menu) to "Level..."
since that dialog box now has
an Edit button in it.
3-3-99
Fixed a bug where saving a level over itself would crash the game.
Saving a level causes
the tools menu to disappear. I was calling a routine after saving
a level that modified
menuItems in the tools menu w/o checking if the tools menu was
even there. Duooh! Made it
so teleporters could warp to themselves (unless you've selected
"warp to random"). That way
you can put one teleporter on the screen and have it warp to itself
to change the ball
direction. Spent the rest of the night trying to figure out how
to draw a custom preview
in a Navigation Services dialog box. They sure don't make it easy!
3-4-99
Got preview working in Navigation Services. That was rather challenging!
If there's not
enough memory to display a picture in the preview, I made it display
a short message in the
preview box stating that problem. Fixed a bug where if the paddle
touched a lodged ball,
it would reset the multiplier. Not good :( Fixed a bug where a
caught ball wouldn't
remain stuck to the paddle when resuming a paused game. Made the
sand the the bomb balls
kick up when they explode spray out randomly instead of uniformly.
Looks a lot cooler!
3-5-99
Put Awesome Bounce detector in.
3-6-99
Put in bubbleGum ball functionality. This included drawing the
artwork and sampling 2 new
sounds. Made it so the same pink ball can re-generate bubbles
after you've caught a
3-capsule. Fixed a bug where a red ball would override an "always
drop" capsule spec-
ification -- so you'd get a red x capsule instead of some important
capsule you may have
needed to help complete the level.
3-7-99
Got preliminary must-hit-ball and must-avoid-ball bonus level
functionality in.
3-8-99
Spent a week in Nashville, troubleshooting and repairing hum problems
in a recording studio.
3-15-99
Since I'm no longer supporting textured bricks, I got rid of the
"Texture" specification in
the brick attributes dialog box. Made it so you can't save a level
that has no balls.
Repaired an intToFixed glitch in the AddBall() routine.
3-16-99
Fixed a bug where the bonus level countdown timer starts counting
when you hit a newly placed
brick on a normal level. Fixed a bug where sizing a brick smaller
would leave garbage on
the screen. Made it so that the ball starts off really slow while
the AlphaLetters are on
the screen, then it speeds up to normal speed. That way, it makes
it easier for a person to
position the paddle when resuming a paused game. I kind of don't
like that the ball starts
off slowly at the beginning of a level. I think it should remain
perfectly still until the
AlphaLetters are done. I may make additional mods to rectify this...
3-17-99
Got multiple monitor support working. Ran into a problem where
some sprite velocities and
animations went way too fast because they were tied to the monitor
refresh rate. I need to
convert some of the modules to account for the screen refresh
rate... Converted alpha.cpp,
sand.cpp, bubbles.cpp, paddle.cpp, smoke.cpp, umphees.cpp, sprite
Manager.c. Fixed some bugs
with the starting ball speed.
3-18-99
Fixed a bug where the ports were getting unbalanced (GDevice was
saved but not restored) when
calling AddScore() after going through a warp tunnel. Made it
so the screen only scrolls on
the main monitor (the one with the menu bar) when the user pauses
a game. Fixed a bug where
the game would sometimes calculate an invalid monitor frequency.
I just needed to put a
Pause(10) before calling the DrawSprocket routine to calculate
the monitor refresh rate.
Made it so ball is frozen at the beginning of a level but moves
slowly the instant after you
resume a paused game. Added CATCHFRUIT sound (I need to rename
that sound) to bubblegum
ball when you hit all 5 bubbles. Made shadows work correctly when
sprites land on the sand.
Increased amount of ball velocity change when you catch a fast
or slow capsule from 1.0 to
1.5.
3-19-99
Made some changes to EventLoop() and DoUpdate() to keep DrawSprocket
from filling a part of
the game screen with the background color (when a dialog disappears)
causing an annoying flash.
This may cause multiple monitor problems (like an area on the
unused monitor not to get
filled in). Will need to test. Started working on the brick layers.
Added layer elements
to the brick attributes dialog. Added "Show Layer" to
the tools menu. Programmed layer
functionality (you can select a brick, set its layer, save a level,
load the level back, and
the correct layer still shows up in the brick attributes dialog).
now I need to get it to
only show the selected layer... Ok. Got all layer functionality
working! Whew! There is
a small bug regarding leaving garbage on gray bricks. I'm too
tired. I'll fix it tomorrow.
3-20-99
Found the problem with the garbage. Draw3DBrick() doesn't know
how to draw just a portion of
a 3D brick so when I was passing in a small rectangle (representing
just the section of the
3D brick I want to draw), it was treating that as "draw an
entire 3D brick whose size is
represented by rectangle, r". I temporarily fixed it by passing
in the entire brick rect for
3D bricks. This will normally work fine but will cause some cosmetic
glitches if other bricks
are layered over 3D bricks. Made Umphee run fast when hit with
the ball. Drew artwork for
curled up umphee. Made umphee start off as a ball, then uncurl
and walk in the sand. Added
COMMAND functionality to sprite.cpp. Now you can specify a command
in the sprite cutter for
a particular frame of a sprite. When the sprite manager comes
across that command, it
calls sprite->DoCommand(). Right now, only the umphee class
uses commands. I give the
command to start walking on the last frame of uncurling. Made
umphee curl up if a capsule
falls on it. After a certain amount of time, it straightens out
and starts walking again.
Got the idea for an umphee-ball. I realized that a black umphee
would be hard to see so I
redrew it in green. Also gave it some hilites for a more 3D look.
Got umphee-ball func-
tionality working. Drew artwork for umphee ball (2 frames of animation).
Made umphee-ball
stop animating when caught. Made it so the umphee would sometimes
appear at the beginning
of a level. Sometimes he doesn't appear.
3-21-99
Fixed a bug where a musical brick prize ball would appear in the
wrong place. Added bonus.cpp
module. It takes care of displaying the bonus points that float
up on the screen. Changed
the bonus artwork from boring gray to yellow. Made the numbers
slowly drift appart as they
rise. Took old bonus code out of the smoke.cpp module. Drew sparkle
artwork. Added
sparkle.cpp module. Added clean sand bonus. Added umphee spaz
out code. While the umphee
was spazzing out, the sound bug I've had for the past year (where
it would start playing the
entire contents of the computer's memory) exhibited itself. Took
another long hard look at
sound.cpp and found (AND FIXED) where the bug was happening. Yay!
3-22-99
Drew artwork for Super Laser Capsule, Super UpDown capsule and
10 capsule. Added ALL and
NONE buttons to brick attributes dialog. Added new capsules to
brick attributes dialog.
Implemented ALL and NONE button functionality. Added super laser
capsule functionality.
Redesigned the way the special capsules are picked. I can now
assign the capsules to groups,
giving the groups appearance priorities rather than giving each
capsule a priority. This
allows me to group multiple capsules together and give each capsule
within a group an equal
chance of being picked. As an example, group 3 contains the Warp
capsule, ten-capsule and
super laser capsule. If group 3 gets picked, you'll have an equal
chance of getting one of
those 3 capsules. If you check the Always Drop checkbox and have
selected both normal cap-
sules and special capsules, there is now a 50/50 chance of picking
from either type. Before,
it would pick from the list of normal capsules most of the time.
Made umphee balls not get
deflected by bubbles. Made umphee curl up into a ball when you
hit it with the paddle.
Added ability to Cue a sound to play at a later time (used when
catching super capsules).
3-23-99
Drew some gems. When saving the registration form, it will now
use NavServices if available.
3-24-99
Fixed a bug where the musical brick number wouldn't get shown
on 3D bricks. Made a couple
of levels. Drew some new backgrounds. Fixed a bunch of minor bugs
I discovered while
creating new levels.
3-25-99
Worked on the design of the phase 1 copy protection.
3-26-99
Implemented my phase 1 copy protection design. Made game counter
only appear in the registered
version.
3-28-99
Made it so in an animList, the COMMAND_COMMAND gets executed before
the frame. The other
things like JUMP, LOOP and HOLD get exectued after the frame.
Made the pink bubbles drift
downward after they popped (using a COMMAND_COMMAND).
3-29-99
Made musical brick prizes reset to OFF when you turn the music
number off. Added artwork for
trigger switches (4 directions). Added trigger switch editing
functionality to level editor.
Wrote code to save trigger switches out with the level when you
save a level. Made trigger
switches turn on and off when you hit them. Drew gate artwork.
Added gate.cpp. Added gate
level editing functionality. Added gate attributes dialog box.
Started writing collision
code to handle gates. Realized that I could use the already existing
brick collision code.
Made the gates generate an invisible brick that's the same size
as the gate. The ball now
collides with this invisible brick. This is way cool because it
now uses the brick manager's
optimal collision detector where a collision isn't even tested
if the ball isn't in the
vicinity of the gate. GATES AND TRIGGER SWITCHES ARE NOW TOTALLY
FUNCTIONAL! 1:30am. YIKES!
3-30-99
Made it so you can only select and hilite bricks that are in the
currently selected layer.
Before you could show layer 2 but still be able to grab bricks
from other layers which made
it really confusing. Repaired some old code where objects would
sink into the sand at
different speeds depending on how fast the monitor refresh rate
was. Added ability to blow
up gates with the bomb ball. Made trigger switches activate when
hit by a laser. Made gates
automatically open after a certain amount of time if a ball gets
stuck behind them and has
no way to get back out. Sampled and added trigger switch on and
off sounds. Added gate
opening and closing sounds. Added "somthing special"
sound.
3-31-99
Prepared and sent off Apple Game Sprockets license application.
Got 2-player mode imple-
mented and totally working. That was an all-day task!
4-1-99
Found and fixed a few residual bugs with the 2-player mode code.
Started working on the
save game feature.
4-2-99
Added LoadSave.cpp.
4-4-99
Fixed a bug where the bricks didn't get saved out properly when
saving a level in the level
editor. Got save functions working for bricks, balls, paddle,
capsules, umphees.
4-5-99
Got a moving teleporter idea. Started working on that.
4-6-99
Got moving teleporters working. This opens up new possibilities
to the game! Modified
teleporter attributes to handle moving teleporters (in level editor).
Setting the end point
is not very user friendly. I need to finish this project! I will
make it more user friendly
if I have time.
4-7-99
Added teleporters to save game function. Added warp tunnels, trigger
switches, gates, fruit,
Added fruitAppear sound. Added smoke when fruit appears. Started
working on the bubble
capturing umphee code.
4-8-99
Finalized bubble capturing umphee code. Found and fixed a few
save game bugs. Clean sand
status wasn't getting saved.
4-9-99
Drew a bunch of fruit (From watermelon to pear). Drew a bunch
of gems.
4-10-99
Added new fruit to game. Made it so each fruit is spaced 2 pixels
from its neighbor on the
border. Added the dialog box that comes up when you complete a
bonus level. Added code to
stamp a sprite into the dialog box.
4-11-99
Got bonus icons totally working. You accumulate them during gameplay
and they get saved
when you get a high score. When viewing high scores, the correct
bonus icons get displayed
in the high score dialog for each person. Fixed a bug where resuming
a paused game would make
the invisible fruit appear!
4-12-99
Fixed a bug where option-dragging gold bricks wouldn't make the
destination bricks gold. Also
fixed a bug where all gates would open prematurely if any ball
had to change direction more
than once. Now the gates only open if there's just one active
ball on the screen that has
to change direction twice.
4-13-99
Argh. Didn't entirely fix the option-dragging brick problem from
yesterday. For some reason,
I had 2 variables that essentially did the same thing but they
were getting out of sync with
each other. I simplified the code and removed one of the variables.
Problem solved! Got
last level detection implemented. Put "end" and "win"
in high score dialog. Added 5 more
fruits. Now the "add fruit" popup menu in the level
editor is so long it runs off the top
of the screen. There seems to be a clash between the menu manager
and DrawSprocket because
things really get screwy with that menu. I decided the easiest
way to solve the problem
is to break the "fruits" out into two categories: Fruits
and Vegetables. Added the "add
vegetable" option to the tools menu. Modified all the code
to handle fruits and vegetables
separately. Ahhh, much better! I noticed sometimes the mouse acceleration
was all off.
Apparently sometimes more than one cursorDevice shows up in the
cursorDevice list even though
I only have one mouse hooked up to the computer. Hmmm. Modified
the code to change the
acceleration tables of all devices in the cursorDevice list. It
keeps track of each device's
original acceleration table and restores it when the game gives
the cursor back to the user.
Whew! almost 2:00 am.
4-14-99
Fixed a bug where the umphee would slide along the sand as a ball
after a capsule fell on
him. Typed up the instructions for the level editor in HTML.
4-15-99
Changed the number of possible brick layers from 5 to 9. Designed
a couple of levels. Got
fed up with flat shaded bricks. Started designing the texture
manager.
4-16-99
Worked all day on the texture manager. Figured out the datastructures
I'll need.
4-17-99
Added texture manager dialog box. Added Texture.cpp. Added almost
all dialog box functionality
(everything except "Add from other level" and "Remove").
Modified brick datastructure to
handle textures. Added "DrawTextured()" to bricks.cpp.
Made changes to brick attributes
dialog box to handle textures. Whew! An all day job but I finally
got textured bricks on
the screen. They're fully editable in the level editor! The texture
manager is awesome!
Fixed a bug in the level editor where a sprite would sometimes
not get unselected when you
click on a brick that's not already selected. Got "Remove"
functionality working in the
texture manager. Tested multiple-hit textured bricks. Works fine!
Yippy! 15 hours of
coding. Ick! G'nite!
4-18-99
Fixed a bug where the texture offsets for invisible bricks weren't
getting initialized to
NO_TEXTURE.
4-19-99
Did repairs all day.
4-20-99
Fixed a bunch of memory leaks. Optimized the sprite drawing routines.
Draw() came down to
61uS from 102uS and DrawShadow() went from 61uS to 44uS.
4-21-99
Spent most of the day squashing memory leaks. Sent some e-mails
to Apple regarding carbon
dating MacBrickout. The carbon dater won't work. Emailing to carbon@apple.com
returns an
automated message that says send any problems with the carbon
dater to carbondater@apple.com.
I send an e-mail there and it bounces back with an unknown user
error message. Argh!
Added a temporary security feature in the beta version. Decided
to convert the entire
project to run in thousands of colors. This involved updating
the blitters, sprite cutter
tool, texture manager and trashing the font cutter. I decided
to just make the font
characters (which are used in the score bar) out of sprites which
means, I now just use one
tool for all images in the game. Redrew some of the artwork to
take advantage of the
multitude of colors now available.
4-22-99
Added the treasure chest module to the game. Modified the screen
shift routines to go faster.
They slowed down when I converted to thousands of colors. Made
the sand antialias to the
background. Scanned a better picture for the about box. The previous
one was tailored for
the apple 256 color palette and it was very grainy.
4-23-99
Made font antialias against any background. This required modifying
the font artwork to
antialias to various grays. In the game, the amount of gray determines
how much of the
background to let through. Wrote a 2D texture mapper that squashes
textures to give an
appearance of 3D perspective. Added textured borders! Right now,
the textures are hard
coded. Need to add a border editing panel in the level editor...
4-24-99
Added some code to time the intervals between vertical blank interrupts.
An attempt to find
out why the sprites jitter on some machines (machines that are
faster than my 7100 and
shouldn't have any problems rendering sprites). Well, I went over
to my friend's house to
debug the jittering problem. We both looked at the same monitor.
He saw the problem but
I did not. Very weird. It turns out that his persistance of vision
is faster than everyone
else's. He was able to see tripple images of the sprites while
it looked as smooth as glass
to me and everyone else. Hmmmm... So. No bug.
4-25-99
Started adding the border texture editing panel. Panel functionality
implemented. Border
texture data loading and saving implemented. Textured borders
are done! Long day!
4-26-99
I just realized that sizing bricks with the arrow keys was all
wrong. Fixed it. Now shift-
down arrow and shift-right arrow expand the size of the selection.
Shift-up arrow and shift-
left arrow decrease the size of the selection. Ahh. Works much
better now. Made end point
on teleporter default to start point when you place a new teleporter.
That way, it'll start
out stationary. Cleaned up bomb ball and umphee ball sprites.
They had sparkles which
looked bad. Cut a new treasure chest sprite. Looks MUCH better.
The old animation was
jumping all over the place. Made it so you can option-click a
color in the border attributes
dialog box to replace it with the most recently selected color.
Fixed a bug where the
textured bricks would be missing (just their shadows would show)
when you resumed a saved
game. It turned out I forgot to load the textures when resuming
a saved game. Duh.
4-27-99
Added code to allow umphee to dig into the sand and come back
out. Drew coin artwork.
Added coin.cpp. Added code to trigger umphee dive sequence. Added
"copy to clipboard"
functionality to registration dialog.
4-28-99
Made it so ending a level with an umphee ball guarantees an umphee
on the next non-bonus
level. Fixed a problem where if all of the ball sprites were allocated,
a new ball wouldn't
appear if you lost a ball. In other words, if you caught a bunch
of 6 capsules and had a
bunch of balls sitting in the sand, then lost your ball, the level
would just sit there and
you couldn't proceed. Fixed it by checking to see if any balls
are in the sand. If so,
it robs one from the sand and places it at the top of the screen.
5-7-99
Redrew the gold coins. They look better now.
5-8-99
Ran into some frame rate issues. Time to optimize! Made the Score
and Mult get updated only
once per frame (if they changed). Before, they would update every
time they changed which
could have happened multiple times per frame if there were a lot
of balls on the screen.
5-14-99
Fixed a bug where pieces of bricks would get overwritten with
the border when they overlapped
the border and neighboring bricks disappeared. Drew side chambers
level. Drew over the top
level. Added ability for bricks to play different sounds when
they disappear. This required
mods to the brick engine and the level editor. Fixed a bug that
was tripping an ASSERT when
you placed a new brick. The textureOffset field of the brick wasn't
getting initialized.
5-19-99
Added Tilt, Chairs and Welcome levels. Fixed a bug where the game
would trip an ASSERT when
the ball tried to warp through a teleporter whose destination
was a random teleporter.
5-21-99
Added clam shell artwork. Added shell.cpp. Made it so shell and
treasure chest can't appear
on top of one another. Made shell open when hit with a ball.
5-27-99
Kirk gave me his 3D texture mapper code (which was derived from
Chris Hecker's 3D perspective
correct texture mapping code in Game Developer Magazine circa
1995). Kirk's version was
highly optimized and could render 6 million pixels per second.
Removed the z-buffering
feature.
5-28-99
Removed the z axis. Now it's essentially a 2D texture mapper.
Removed the luminance handling
code (since MacBrickout's textures will always be the same brightness).
Optimized a lot of
the code. Looked at what would be needed to incorporate this mapper
into MacBrickout. Yuck!
The object datastructure would have to be completely revamped
to handle triangles. Collision
detection would have to be rewritten. I decided to just keep the
texture mapper I have now
and just optimize it as best as I can.
5-29-99
Doubled the speed of Sprite::Draw() and Sprite::DrawShadow().
I did this by disassembling
the code and moving C instructions around so there would be no
pipeline stalls. Also, instead
of having 4 different blitters in one routine (normal, rotated,
clipping and clipping against
sand), I broke them out into separate subroutines. You would think
the added subroutine
call would slow things down but it actually sped things up. Maybe
the compiler was better
able to assign the registers with less code to consider at a time.
Or maybe the cache isn't
getting blown this way. I dunno. 3:21am. Gotta get some sleep.
6-1-99
Finally found the source of the frame rate slowdown. It was an
interrupt routine generated
by my sound code that took 2ms every time it got called. I need
to rewrite the sound code
to do the sound mixing outside of the interrupt.
6-4-99
Made it so bricks in different layers don't get drawn in the wrong
order when option dragging
over them in the level editor. Fixed a bug where sometimes a ball
wouldn't free itself from
the sand when you exploded a bomb ball resulting in the BALL counter
counting down and the
user getting frustrated.
6-6-99
Posted beta web page. Released Beta-1! Pointed one of the beta
testers to that page so he could
start testing.
6-7-99
Shot some wood textures and imported them into the game (chairs
level). Added wood sound
to game. Elizabeth thinks I should try again with the sound. Will
sample another sound
tomorrow.... Made some minor changes to the level editor doc.
Added unhappy capsule
artwork. Added bomb ball capsule artwork. Made happy capsule turn
unhappy when it hits
the sand. Made unhappy capsule spawn 4 red X capsules at 1-second
intervals.
6-8-99
Added CHEST_OPEN and CHEST_CLOSE sound effects. Made it so when
you hit the GOLD or GRAY
button in the brick attributes dialog box 3 things happen: All
capsules are turned off, the
numHits field gets updated with the correct value and the sound
gets set to Metalic. Sampled
new wood sounds. They were approved by Elizabeth! Yay! Made it
so when you select a sound
from the brick attributes dialog box, the sound plays. Changed
bomb ball capsule artwork.
Now it's tan with a blue "B". Made changes to the level
editor (Brick attributes dlog), to
account for the new bomb ball capsule. It can now fall from bricks.
Need to program its
functionality tomorrow. Made the clam shell appear after catching
2 clear capsules in a row
in the same level.
6-9-99
Changed bomb ball capsule into radiation capsule. Drew radiation
ball artwork. Imported new
artwork into game. Programmed radiation capsule functionality.
Programmed radio active ball
functionality. Need to add radiation sound effects. Fixed a bug
in the sprite cutter where
occasionally one frame of animation of 1 arbitrary sprite was
hosed. Turned out to be a
pointer that was no longer valid after resizing a handle. Sampled
RADIATION_ARMED and
RADIATION_RELEASE sound effects. They came out really cool! Almost
midnight. My eyelids
are interrupting my vision!
6-10-99
Made it so radio-active balls can't go through gold bricks. This
prevents a user from
radiating a ball into a hollow gold square (or similar structure)
and then not being able
to get back out. Added Rock sounds. Identified a bug where ball
would suddenly change
directions after hitting the paddle. Haven't fixed it yet though...
Fixed a bug where
sometimes a capsule's shadow wouldn't get turned off when it landed
in the sand. Fixed the
ball sudden direction change bug. Created "Rocks" level.
Don't know if I'm going to keep
these rock sounds. I might sample some new ones. I need to add
another sound menu to the
brick attributes dialog box. One for multi-hit bricks and one
for disappearing bricks.
6-11-99
Added multi hit sound menu in the brick attributes dialog box.
Now you can select which
sound a brick makes when it disappears and which sound it makes
when it gets hit but doesn't
disappear. Fixed a bug where "Beginner" and "2-player
mode" menu items wouldn't be checked
when you resumed a saved beginner or 2-player game.
6-12-99
6-13-99
Weekend. Didn't do any programming.
6-14-99
Fixed a bug where a radioactive ball would get stuck on gold bricks
and the game would hang.
6-15-99
Made it so if you pop an umphee bubble with the paddle, you get
223 points. Fixed a bug
where if the last capsule caught on a level was clear, you only
needed to catch one clear
on the next level to make the clam shell appear. Released 4.0ß1.
6-16-99
Made it so if your monitor is capable of 1024x768 mode, you can
display a small 640x480 game
screen centered on a 1024x768 display. Had to add some GlobalToLocal
stuff in the level
editor to handle the different display configuration. Made it
so you select the alternate
display config by holding option when you start up the game. Made
it save the configuration
state in the preferences so you don't have to keep holding option
each time you start up
MacBrickout. If you do hold down option each time you start up
MacBrickout, it'll toggle
between 1024x768 mode and 640x480 (full screen) mode. Made the
game not scroll when you
pause and resume when in 1024x768 mode.
6-17-99
The spacing in the score bar text was a little off. Fixed it.
Tuned up Adam's HourGlass
level.
6-18-99
Added radioactive capsule to capsule prizes menu in brick attributes
dialog. Added musical
bricks to level 1 with a radioactive capsule prize. Made the shadow
darker on the right
border. Looks much better. Fixed a bug where a ball's shadow was
positioned incorrectly after
it was freed from the sand. Darkened the clam shell. Changed the
brick colors and background
texture of level 2 (triggers). Added fruit and musical bricks
to "Over the Top" level.
6-19-99
Fixed a bug where unregistered version would drop special capsules
if alwaysDrop was set.
Disabled musical bricks in unregistered version. Made MULT count
up by a maximum of 6.
Added fruits to more levels.
6-20-99
Added "Retro" level.
6-21-99
Tuned up some levels. Added "bombs away" bonus level.
Got some ideas for some more bonus
levels.
6-22-99
Changed name of "bombs away" level to "red, then
blue". Added "Be Happy" bonus level. This
level turned out really cool! Disabled 25000 red-x bonus when
catching happy capsules in
bonus levels. Needed that for the "Be Happy" bonus level.
6-23-99
Changed the trigger switch so that it's green in the "on"
position. Some beta testers
complained that it was too hard to differentiate between on and
off. Increased the
probability of the bonus capsule falling. I plan on having more
bonus levels and I plan on
the levels themselves being more challenging so the user needs
more chances to get to bonus
levels.
6-25-99
Released ß2. Added radioactive ball to ball prizes menu
in brick attributes dialog. Created
RadioActive level. Added ability to have trigger switches always
stay on once you turn them
on.
6-26-99
Fixed a bug where the radioactive ball would get stuck on gray
bricks. Increased the clean
sand bonus from numBricks * 10 to numBricks * 20. Tuned up RadioActive
level. Made it level
2. Made it so you get to keep your bonus capsules if you lose
a ball.
6-27-99
Fixed a cosmetic bug where sometimes there would be a small space
between the ball and the
paddle when you caught a ball.
6-28-99
Added "Apply Texture From Bkg..." item to tools menu.
Made it only be enabled when just
bricks are selected. Added its functionality. You can select a
whole group of bricks and
apply a large texture to that whole group. Made "Dino Trouble"
level. MacBrickout will
automatically cut up the large texture into a bunch of small brick-sized
textures. Fixed a
bug where you would hit musical brick #1, then hit musical brick
#2, then hit another
musical brick #1 and the second musical brick #1 wouldn't register
as a musical brick.
Does that make sense? Fixed a bug where if the game spawned a
radioactive ball and you had
the button held down, it would instantly release radiation. Added
instructions for "Apply
Texture From Bkg" to the html level editor doc.
6-30-99
Changed "Dino Trouble" to "Dino Mite". Wrote
a shadow drawing routine for textured bricks
so the shadows won't always be rectangles (in the case of textured
bricks that have trans-
parent parts to them). This allowed the shadows in Dino Mite to
follow the bricks precisely.
7-2-99
Added "Can you get them all" bonus level. Artwork for
this level still needs to be added.
Released ß3.
7-3-99
Played around with some level design. Thinking about making teleporters
as musical brick
prizes. Also, thinking about being able to teleport to different
levels by uncovering
secret teleporters. Drew a new bkg for "Good Luck" level.
7-6-99
Fixed problem where you would sometimes get the error message,
"no texture exists with this
offset".
Took a break. Family visiting from out of town
7-10-99
Made game start off with 4 balls instead of 3.
Took another break. More family visiting from out of town. previous
family left.
7-14-99
Did some thinking about the musical bricks. I'm considering identifying
them plainly because
they're just too hard to figure out when they're hidden (especially
on the later levels).
7-15-99
Made it so musical bricks always identify themselves. Needed to
be able to turn off the
identification sometimes (like in the radioactive level) so I
had to add a field to the
brick datastructure. This caused me to have to convert all the
levels so that they had the
updated brick structure. Started drawing some musical note artwork.
Pondered how and when
the bricks will identify themselves. Should all musical bricks
be identified simultaneously
or should only the current hit number be identified? Found a bug
where if you resume a saved
game that had an active pink ball, it would start blowing bubbles.
Had to add a field to
the ball datastructure so that it sould save out whether or not
the pink ball was spent.
This caused me to have to convert all the levels again to handle
the new ball datastructure.
Fixed a bug where the level jump dialog box wouldn't show the
bonus levels when you called
it up while on a bonus level.
7-16-99
Started writing the code to handle identifying the bricks that
have musical notes. I added
a musicLink field to the brick datastructure so that I could link
the musical bricks together.
This makes it so the game doesn't have to search the entire level
for the musical bricks
(potentially causing a stutter in the frame rate in levels with
a lot of bricks). Instead,
it can walk the linked list of only musical bricks. Fixed a bug
where the paddle wouldn't
deflect a ball at the start of a level if you finished the previous
level with a red paddle.
7-17-99
Drew animated music note artwork. Imported artwork into game.
Made music notes appear over
bricks matching CurMusicNum. When CurMusicNum changes, those notes
get erased and new notes
get positioned over bricks maching new CurMusicNum. Added a checkbox
to the brick attributes
dialog box so the user can specify that they don't want a musical
brick to be identified by
a music note. This allows me to hide the musical bricks in "RadioActive!"
that drop the
radioactive balls. Took "Show Musical Bricks" out of
the tools menu. Now it always shows
the musical bricks whenever you enter the level editor. Took relating
text out of the level
editor HTML document.
7-18-99
Fixed a small bug where the music notes wouldn't show up on a
new level until after you hit
a brick.
7-19-99
Fixed a bug where selecting "New Brick" from the level
editor would create a brick with
incorrect sound values causing the sound manager to play a bunch
of garbage when that brick
got hit with a ball. Created a really cool level. No name yet.
For now, it's called "test".
Updated MacBrickout web page.
7-20-99
Drew gold music note artwork. Changed game so that musical bricks
with prizes show a gold
music note. Music brick w/o prizes show a green music note. Created
"Try Hard", "Power
Tower" and "Wall Flowers" levels. Ran into frame
rate jittering problems due to the large
number of gates in "Power Tower". Since the gates don't
really move, it's kind of pointless
redrawing them each frame. I'm probably going to make the gates
bricks instead of sprites.
This will require a good amount of coding... Bah!
7-21-99
Made it so when you select "Arrange Levels", it comes
up with the last level you were on
selected. Released ß4.
7-22-99
Started working on redesigning the gates so that they don't take
up so much CPU time (they are
currently being redrawn every frame). Texture manager's going
to handle drawing the gate texture.
Had to modify texture manager slightly so that I could pass in
an address of a texture instead of
just passing a texture offset. This allows the source of the texture
to either come from the user
imported textures or from the built in sprites. I want the gates
to come from the built-in sprites
so that users don't have to import gate textures into every level
they design.
7-23 to 7-26
Completely redesigned the gate datastructure. Changed tons of
code. Opened up a whole can of
worms. Nothing worked. Reverted back to original design.
7-28-99
Slowly moving gate info into brick datastructure... Unioned the
Brick and Gate datastructures since
gates are essentially bricks. Ok. Datastructures are set. Code
compiles. Gates are totally
disfunctional. Gate.cpp is completely useless. Gates are bricks.
I'll start rebuilding functionality
tomorrow. All this to maintain a smooth frame rate. Sheesh! 3:06am.
I'm zombied!
7-29-99
Got "Add Gate" working again. Option clicking gate to
rotate works again. Gate attributes working
again! When saving and loading levels, gates not working... Since
gates are now bricks, I'm
thinking that I can have the gates saved for free when all of
the bricks get saved... Gotta think
on this some more. Yawn...
7-30-99
Made the gates get saved for free when the bricks get saved. Gates
behave like bricks still.
There's my next task... Ok. Gates behave like gates (ball bounces
off of them w/o destroying them).
Now I need to make them open and close but I'm fadin' fast. This
will have to be tackled tomorrow.
7-31-99
Made it so gates can't be sized along the wrong axis (horizontal
gates can't be sized vertically).
Setting Max value in Gate Attributes dialog works now. Max field
now shows correct value when
initially calling up the gate attributes dialog. Gates now operate
correctly (yay, and they don't
get drawn every frame wasting valuable CPU time!!!). Gates now
get saved out correctly in levels
when you save a game. You can even save a game as a gate is opening
or closing and that info will
be remembered. Fixed a trigger switch bug where the state of the
switch wasn't getting saved when
you save a game.
8-3-99
Fixed a texture drawing bug that appeared when you selected the
640x480 game area inside of a
1024x768 screen. Made wacky setting get saved in preferences.
8-4-99
Fixed a bug where the bonus icons weren't getting displayed in
the correct spot in the high score
dialog when you were set to 1024x768 mode. Added functionality
to allow teleporters to vaporize
when they reach the end of their path. Hopefully will add fun
to some levels. Added an End Game
confirmation Alert since it's easy to hit command-E when you're
indending to hit command-R. Ran
into a problem when a teleporter gets deleted. All the indices
of who links to who get messed up.
Wrote a routine to correctly update the linkTo indices after a
teleporter gets deleted. Added a
HitGate sound. Will run it by Elizabeth for final approval. YES!
Final approval given. Added
ALERT that comes up when user has reached level 10 that tells
the user how to access the SECRET menu.
The ALERT will only come up once per user.
8-5-99
Now, upon leaving ArrangeLevels, the game resets to level 1. Got
a new host for my website. Uploaded
all data to the new host.
8-6-99
Added "Watch Out" level. Wrote a ton of the instruction
manual in HTML format. Had to cut up and
import a bunch of GIF images from my MacBrickout sprite database.
8-7-99
Fixed a bug where an ASSERT would falsely trip when you paused
the game and started a new game when
teleporters were on the screen. Fixed a bug where previews weren't
working when selecting a bkg
texture for a level from another level. Created the Maze level.
8-8-99
Fixed a bug where bricks defaulted to music note being turned
off. Did some major tuning on the Maze
level. It's getting to be pretty fun. Made it so that if a ball
gets stuck in a gated area, the game
only opens the most recently hit gate instead of opening all of
the gates. Finalizad Maze level.
Decided to go ahead and implement my idea where registered users
can pick 1 of 9 levels to play. When
they complete that level, they get to choose from the remaining
8 levels. When all 9 are completed,
the next batch of 9 shows up. So now, people will be able to do
levels in any order but they still
must complete all levels in order to get to the game ending. Added
AIM_FOR_LEVELS option in OPTIONS
menu. When checked, users can choose their own levels. If unchecked,
levels are progressed
sequentially. Made it so this item is dimmed in the unregistered
version. Added field to preferences
file. Made game save the state of AIM_FOR_LEVELS in the prefs
file. Added code to prevent unregistered
users from hacking the prefs file to enable this feature. Created
"Pick A Level" level. Saved this
level's resources inside the MacBrickout application. Added LevelSelect.cpp.
Made MacBrickout able
to pull level resources out of a level file or out of the MacBrickout
app. Made MacBrickout display
a different opening screen depending upon the AIM_FOR_LEVELS setting.
Added CreateThumbnail() which
creates a tiny 100x75 thumbnail PICT of the level for use in AIM_FOR_LEVELS.
Created thumbnail pictures
for all levels (edited and saved each level). Made the first 9
levels show up as thumbnails on the
"pick a level" screen. Looks cool! Got it so that the
correct level loads when you hit it with the
ball. I'm pooped. 2:06am. Will continue tomorrow...
8-9-99
Got thumbnails working. Whichever one you hit is the level you
get to play. There are still several
minor issues I have to address -> 2-player mode needs to show
the correct thumbnails for each player,
also the "Level" indicator in the high scores dialog
box becomes meaningless in this mode... Made it
so any deleted thumbnails reappear when you start a new game.
Oops. I had caused a bug where the
display shifting got all goofed up. Fixed it. If there's less
than 9 levels in a level group, some
of the bricks (thumbnails) would get drawn without any levels
on them. Now those bricks get deleted.
Got game ending detector working in thumbnail mode. When you complete
all 9 levels on the thumbnail
screen, it now loads up the next 9. Had a thing in there where
I can hit the CTRL key to drop into
the debugger. One of the beta tester's joysticks was mapped to
that key and was causing their computer
to crash. Changed the debug key combination to CTRL-OPTION.
8-10-99
Fixed a bug where the shadows didn't look right on the thumbnail
level. Removed the shadow representation
of the background PICT from all of the levels (I now calculate
my own shadow in the code). This reduced
the size of the game by over 200K! Ok, now the high score dialog
puts a # in front of the level number
to signify that you played the game in thumbnail mode and that
the level number is the total number
of levels you completed and not the highest level you achieved.
If there's no # in front of the level
number, then you played the game in regular mode and that's the
highest level you achieved. Made game
update the screen instantly after you select the AIM_FOR_LEVEL
option. Created 2 thumbnail arrays,
one for each player. Now the game can remember which levels each
player has already played and not
display them on the thumbnail screen. End game detection is kind
of sloppy -- especially in 2-player
mode and especially if bonus capsules were caught on the last
level and there are no more bonus levels
to play. Brain is foggy. Will lay the logic out on paper tomorrow
and rewrite...
8-11-99
Took a break from programming. A bunch of repairs came in so I
plowed through those all day.
8-12-99
Fixed a bug where you caught a red X capsule in a bonus level
and died -- started next level and first
capsule you caught gave you 25000 points! Some people might have
called this a feature. Fixed a bug
where game wouldn't go into a bonus level in thumbnail mode. Fixed
a bug where catching an exploding
fruit with the paddle would trip an ASSERT.
8-13-99
Came up with a cool bomb ball level. Haven't named it yet. Fixed
a bug where the shadows of textured
bricks didn't creep up the right wall as they should. Found a
bug where a newly spawned bomb ball will
immediately go off if the mouse button is held down. Will fix
this next.
8-14-99
Fixed the bug where the bomb ball would go off if the mouse button
was already held down. That would've
been annoying! Did some more work on the instruction manual. Decided
to name the bomb ball level
"Bomb's Away". Almost finalized "Bombs Away".
Fixed a bug where the music notes would show up in the
unregistered version. Made it so bomb balls were available in
Bombs Away for unregistered users (so
they could get past the level). Made it so the clam shell doesn't
appear until you catch 3 clear
capsules in a row (used to be 2).
8-15-99
That sound bug re-exhibited itself (where it plays a bunch of
continuous gak out of the speaker). The
thing happens like once every 2 months! I threw in a couple of
ASSERTS in hopes that I can find it
before release!
8-16-99
Shot some new textures for backgrounds. Tiled and prepared backgrounds
for the game. Imported the new
backgrounds into some levels. Created a new "don't touch
the walls" bonus level. Drew a background
for bonus levels. Fixed a bug where a newly placed ball's velocity
was set to 0 instead of 300.
8-17-99
Made it so the state of the thumbnails (which levels have already
been played) get saved when the user
saves a 1 or 2-player game. Fixed a bug where you'd get a bunch
of annoying SysBeeps() when you
completed a bonus level. It turned out that the modal dialog was
beeping because there were a bunch
of spurious mouse down events in the event queue from the previous
level. A FlushEvents() call remedied
the problem. Added an icon that comes on when the sand is dirty
-- in case you missed the dirty sand
alert sound. My stamp-sprite-into-underlay routine wasn't accounting
for the sprite's hotspots. Fixed.
Removed gold bricks from bottom of thumbnail level. They were
pointless. Created a new "Lost Ball
Mania" level.
8-23-99
Drew a new border for "Wall Flowers" level. Tuned up
"Lost Ball Mania". Redesigned "Rocks". Fixed
a bug where the musical bricks wouldn't identify themselves in
edit mode. Drat! Made a cool level and
saved it without all of the brick layers turned on. Found a bug
where only the currently displayed
bricks get saved. I lost all of the bricks in the other layers!
Drat! Grumble grumble. Fixed the
bug so it won't happen to anybody else. Now I have to go redesign
the level. I guess I'll look at the
bright side -> it always comes out better the second time...
Ran into a problem where I had gotten 2
balls trapped in a gated area and I lost the 3rd ball in the sand.
The gates never opened to release
the 2 trapped balls. Found the cause of the problem. Hmmm. I need
to rethink the gate A.I. I'm
going to try to get 2 levels done per day. Hard part is going
to be coming up with the artwork. Still
shooting for a summertime release but that leaves me less than
a month!
8-24-99
There was another place in the debug version of the code that
tripped a Debugger() statement if the
control key was held down. Changed it to control + option. Hitting
a captured umphee bubble with a
ball or laser gives you lots of points. Hitting the captured umphee
bubble with the paddle gave you
no points. Now it gives you some points but not as many as hitting
it with a ball or laser. Finalized
"Bombs Away". Redesigned "Rocks" again. Created
"Specks" and "Short Circuit".
8-27-99
Did some more work on the instruction manual. It's nearly complete!
8-29-99
Drew some new backgrounds. Fixed a cosmetic bug where a high multiplier
value would run into the
"Score:" text in the score bar. That frigging sound
bug came back. Previous ASSERTS didn't catch it!
Littered the sound routines with more ASSERTS so I can surely
catch it next time it occurs. The level
editor had a bug where it would trip an ASSERT if you duplicated
a group of bricks that had 1 or more
gates in it. Fixed. Created "Rainbow Road" level. Cleaned
up a little garbage in the gold music
note animation. Finalized "Specks".
8-30-99
Tuned up and finalized "Hit the Red Triggers". Finalized
"Lost Ball Mania". Added instructions on how
to operate the "Border Attributes" function in the level
editor.
8-31-99
Touched up the radiation ball artwork and the caged ball artwork.
9-1-99
Added squish sound. Finalized "Retro" level. Added some
more info about musical bricks to the
instruction manual. Also added info on how to register the game.
Placed some super secret hidden
musical bricks in some levels. Renamed "Specks" to "Confetti".
Renamed "Maze" to "Carnival". Made
"Short Circuit" a lot more fun by adding a couple of
teleporters. Finalized "Welcome to MacBrickout"
level. Added discussions about frequent players and the options
menu to the instruction manual.
Created "Green Bricks Add Time" bonus level.
9-2-99
Fixed a bug where the collision detection would cease to function
if you caught too many slow capsules
in a row. Started developing screenshots HTML file. Wrote code
to facilitate taking screen shots. It
basically grabs an image of the screen right before it draws "PAUSED"
on the playfield.
9-3-99
Sampled and added c.s. sounds. Programmed c. close and capture
ball functionality. Added
c. release pball functionality. Redrew pball artwork. Added pball
functionality.
Whew! That was complicated. Removed clear ball from game. It's
dead. Removed clear ball from
instruction manual. Made some other minor changes to the instruction
manual.
9-4-99
Fixed a bug (caused by removing clear ball from game) that caused
"Radioactive" to generate the wrong
balls in its musical bricks. Released Beta-6.
9-5-99
Fixed a bug where pball mode would stop working if you caught
another capsule. Fixed a bug where the
ball would freeze if you were holding it (via catch) while you
caught a red-x capsule. Glad I found
this one! Made the pball get stamped into the border when pball
mode is activated. Made it so
preferences always goes into preferences folder. Before, it would
go into the MacBrickout folder if
possible but whenever you replaced your MacBrickout with an updated
version, you'd invariably overwrite
your preferences file and lose all of your frequent player info.
9-6-99
Created "Bombs" bonus level. A beta tester found a bug
where you could trap a ball in a particular
gated area and the gate would never open. Problem turned out to
be incorrect gate data in the level
file. Replaced the gate and the problem went away. Pointed a couple
of mac gaming websites to the
MacBrickout screen shots. That gate problem is bugging me. There
has to be something in the code
which is causing the curLength to differ from the maxLength on
a closed gate. Ah, found it. If you
resize a gate by using the Shift-Arrow keys, the maxLength field
gets updated to the new size, but the
curLength and desiredLength fields don't get updated. Fixed! Went
through all of the levels and found
(and fixed) all gates containing inconsistent length data.
9-7-99
Added more bomb bricks to the "Bombs" bonus level. It
was way too hard. Now, it's a lot more fun. I
noticed "Confetti", "Rainbow Road", "Short
Circuit" and "Rocks" were missing vital nutrients
(namely
fruits and vegetables). Corrected that minor oversight. Talked
about scoring in the instruction
manual.
9-8-99
Did some more work on the instruction manual. Looked at what it
would take to allow users to put
'snd ' resources in the level files and have those sounds show
up in the level editor. That way, people
could add their own brick sounds to the game. Hmmm. It would require
a good amount of time to implement.
I think I'll hold off and maybe implement this feature in a later
version. Went through all of the
levels and cleared out a bunch of textures that were no longer
used. Levels 1-19 are pretty much
finalized. I'm figuring I'll need about 8 more levels and 2-3
more bonus levels.
9-9-99
Most of my day was taken up by the cable installers hooking up
my new cable modem! Whew! No more slow
internet connections. Drew a target texture for the bricks in
"bombs away". Hmmm. Don't know if I
like it. Might give it another shot tomorrow. Created "Half
and Half" level.
9-10-99
Drew a new target for "Bombs Away". Looks much better!
Made some significant changes to "Rocks" after
one of the beta testers voiced some concerns about its difficulty.
Tuned up "Half and Half". Elizabeth
proofread the instruction manual (all but the level editor stuff).
Gosh, I think I may be done with
the instruction manual! Thinking about posting the instruction
manual on the website... What's left?
3-7 more levels, 2-3 more bonus levels, game ending, a few more
brick sounds, treasure chest and gold
coin functionality, "Apply from other level" functionality
in border attributes section of level editor,
place fruits in 3.0 levels... I'll try and tackle the brick sounds,
treasure chest and gold coin
functionality and hopefully "Apply from other level"
this weekend. That will give me all next week
to come up with the remaining levels. Week after, work on game
ending. Should be pretty close to
release after that. Came up with cool idea for "Plumber"
level. Also got cool light bulb level idea...
9-11-99
Got special umphee mode working. He..he..
9-12-99
Got rid of the "Apply from other level" texture management
function. Drew stationary coin artwork and
imported it into the game. Got game to display proper coin icon
in the border. Got coin status for each player
to save and reload during save-game and load-game situations.
Decided the high score achievements needed revamping.
Drew a bunch of achievement icons and added them to the game.
Changed the datastructure to accomodate 22
achievements even though there are only 16 bits to represent them.
Before, it was one bit per achievement.
Added code to submit the various achievements based on cool things
the player does.
9-13-99
Removed gold ball stuff from game. Sampled coin flip sound. Sampled
a couple more umphee sounds. Imported sounds
into game. Added Sound::Cancel() so I can cancel a queued sound
before it starts playing. Argh! I keep losing
my balls. My mouse is dirty again! I just cleaned it yesterday.
Sampled some more brick sounds. Discovered
and fixed a bug where the game wouldn't remember what multi-hit
sounds you've selected for the multiple hit bricks.
Added information about "achievements" to the instruction
manual. Fixed a bug where creating shadow bricks would
trip an Assert(). Documented how to create shadow bricks in the
instruction manual. Fixed a long time bug where
3D bricks (the ones with the light and dark edges) wouldn't redraw
properly when a portion of them was uncovered
by a disappearing brick. Instead of redrawing just the portion
that was uncovered, it redrew the entire brick
which would hose any other bricks that were overlapping it. This
problem is now fixed! Made it so multi-hit
textured bricks flash just like their non-textured counterparts
when they're hit with a ball. Added the screen
shots link to my home page.
9-14-99
Drew background for pipes level. Drew some brick artwork for pipes.
Added the ability to the level editor to
allow the brick shadows to be turned off for selected bricks.
Drew the rest of the artwork for pipes. Placed all
the bricks. Finalized Pipes. Hmmm. I need the ability to turn
off the flashing on multi-hit bricks... Added
a description of the brick attributes shadow checkbox to the instruction
manual. Oops. Forgot to initialize the
ShowMusicNum and drawShadow fields of the default brick datastructure.
The result was, sometimes you'd place
a new brick and those fields would be undefined causing the shadow
or music note to sometimes not appear. Fixed.
A beta tester found a problem with catch. You can catch a ball
underneith the paddle. If you have full up-down,
you can push the ball down into the sand. If you release the ball
then, you'll lose the ball in the sand. This
doesn't seem fair. I'll need to fix this...
9-15-99
Changed the catch routine to always force the ball on top of the
paddle. While I was in there, I forced the ball
to always make contact with the paddle horizontally too (so it
won't be hanging off of one edge with lots of space
between the ball and the paddle). Wrote a compression/decompression
routine for the sounds. I reduced the size
of the sound data by half.
9-16-99
Fixed a bug in the sound decompression routine where the offsets
were being calculated incorrectly. Works great
now and the game is about 500K smaller! This will decrease download
time for people and reduce the risk of me
hitting my maximum download quota set by my ISP.
9-17-99
Made it so users can replace any sound in the game with their
own, simply by adding a 'snd ' resource with the
proper resource ID to the appropriate LEVL file. Posted the instruction
manual on the web page. Fixed a
bug where a custom sound installed in one level would play in
the following level (forgot to purge my sound
buffer, duh). Wow. Found a crash bug. I was purging the alternate
sound buffer before the alternate sounds
were finished playing. Fixed.
9-18-99
Achievement sound was delayed 1 second when opening a gate. Fixed.
Released Beta-7.
9-19-99
Hmmm. Identified an obscure bug dealing with textured multi-hit
bricks with transparency where garbage gets left
on the screen after the brick flashes in the area where there
was transparency. I need to add a flash option
to the brick attributes dialog... Added the ability to turn flashing
on or off for multiple hit bricks. This
made the pipes level look a lot better! I had to go through all
the levels and set the flash attribute for each
multiple hit brick (since that field was previously an undefined
pad field in the brick datastructure). Created
light bulb level, drew ligh bulb artwork, etc. Hmmm. Don't know
if I like it. Will try tuning it up later.
9-20-99
Changed the artwork for the avacado, coconut and pink achievement
icons. A problem was found with the thumbnail
mode where, after completing around 10 levels, the ball no longer
detects a collision with the thumbnails. This
is really bad since it basically means the end of your game. I'm
giving this top priority.
9-21-99
Whew! Fixed the bug where the ball would sometimes go clear through
thumbnail bricks. Fixed a bug where the
brick shadows were the wrong color sometimes (this was due to
an optimization I had made a few days ago when I
was working on the flashing brick code for the pipes level). Fixed
a bug where the high scores wouldn't record
how many levels you achieved when playing single player thumbnail
mode. Drew a sort of cool level. Needs tuning.
No name yet. Found and fixed a crash bug that happened when a
sprite went off the top of the screen. Geez. I
can't believe I didn't spot this earlier! Discovered that I would
have run into the same problem if a sprite had
gone off the left side of the screen. Fixed. Bottom and Right
sides were already taken care of.
9-22-99
One of the beta testers found a crash bug where instead of the
special achievement sound playing, you hear a sort
of machine gun sound. Gameplay continues normally, but as soon
as you try to pause the game... Crash and burn.
I put together a special build with many of the special powers
enabled since it's looking like it only happens
when a lot of stuff is enabled and flying around on the screen.
So far, I have been unsuccessful in duplicating
the problem here. I have a hunch that even though it appears to
be sound related, it's something else... Going
to try a few more things tomorrow. A friend of mine gave me a
great idea for the game. It's just too cool not
to implement. Started drawing the artwork. This is one of those
finishing touches the game needed.
9-23-99
Implemented "Aye ball" functionality. Drew and added
necessary achievement artwork. Added clamOpen achievement
icon. Created "Strange" level. Needs tuning. Ug. No
progress on the rare crash bug mentioned yesterday.
9-24-99
Felt bad, didn't get any programming done. Made some rebar cages
to reinforce some concrete footings.
9-25-99
Tuned up Bombs bonus level. There was a brick that, when hit,
would create a cavity that would cause the ball to
deflect in the wrong direction. This would cause a chain reaction
where ALL of the reserve bomb bricks would
release bomb balls. Although it looked cool, it would certainly
mean the user wasn't going to pass the level
successfully. Took it easy yesterday and today in the MacBrickout
programming department. Haven't had a break
since the 28th of August. May take it easy tomorrow, then resume
full force on Monday.
9-26-99
Took it easy today. No programming.
9-27-99
Made freeware versions of MacBrickout 3.1.2a and 3.1.2a(J). Called
it MacBrickout 3.2. Haven't decided if I'm
going to release this version yet, but if I do it'll be ready.
Boy, that was some of the worst code I have seen
in a long while. I can't believe I wrote it! Fixed a bug where
the gate shadows wouldn't get drawn after the
gate started opening. Gave "Lost Ball Mania" a face
lift. Colors were boring. Now they're not! Need to tune
up and finalize "strange" tomorrow.
9-28-99
Started adding the "authorized level" stuff. Level groups
that are "authorized" will allow the game ending to
show. Users who make outstanding level sets will be able to have
them authorized / officialized, increasing the
chances that other people will want to play them. Added some teleporter
randomness to "Catch the Teleporter".
This improved the fun factor for this level. Changed the color
scheme of "Radioactive". I'm trying to find the
balance between challenge and frustration with the ball speed
throughout the levels. Ultimately, I want maximum
challenge with zero frustration. I don't want a level to feel
impossible because the ball's going too fast. I
played through all of the levels. There are a few places where
the ball gets going too fast. I'll have to
re-examine those areas tomorrow and maybe slow the ball down a
bit. Game Ending, Last 5 or so levels, final
tuning. That's my focus now.
9-29-99
Designed a way cool level (no name yet) involving lots of balls.
Problem is, MULT gets way too high way too fast.
You can rack up half a million points easily on this level alone
which totally unbalances the scoring throughout
the levels. I don't want to *NOT* have levels with lots of balls,
so I think the solution is to be able to turn
off the MULT on certain levels. With the MULT off, this level
would be fair (to the other levels) and would
definitely be a keeper. Will implement MULT on/off functionality
in the level editor tomorrow. Will also name,
tune up and finalize this way cool level tomorrow. Slowed the
overall ball speed down a bit. I'll have to play
a few more games to see how the gameplay feels.
10-1-99
Implemented MULT on/off functionality. Decided I didn't like it.
With the MULT off, you lose the challenge of
trying to avoid balls with the paddle (in order to let the MULT
increase further). So I compromised by allowing
the MULT to still function on levels with lots of balls, but its
effectiveness is reduced. This works out a lot
better! Added "Reduce MULT" to the level editor. Updated
the instruction manual.
10-4-99
Finalized that cool level from 9-29. It's called, "Ants".
Made it so if you pop a bubble with a caught ball,
the ball won't leave the paddle in some funky direction. Did some
tuning on "Lost Ball mania", "Bombs Away",
and "Wall Flowers". Played through the game several
times, looking for bugs or other anomolies. Found a few and
jotted them down. "Strange" is still bothering me. The
level is boring. I'll try to come up with something
clever for that level tomorrow, else I'll cut it.
10-5-99
Made spazzing umphee not dive into the sand when he hits certain
balls. I'm going to have 4 full solid days of
MacBrickout work coming up on Thursday (family's going out of
town and leaving me behind). Came up with a game-
plan. My goal is to take it to 99% complete.
10-6-99
Took a break from programming. A bunch of repairs came in and
I needed to get caught up. Also, I felt that it
would best to get my mind off of the game for a day before diving
in for 4 straight long solid days of MacBrickout
work starting tomorrow.
10-7-99
Added "Smokin' Aye" sound effect. Had to fix a bug in
the sound compression routine where the byteCounts were
overflowing. Bug didn't show up until now because the byte counts
would always finish before 65535. Now they're
scaled down by the max count so they'll never overflow. Found
and fixed a bug where in a 2-player game, MacBrickout
would not remember the fruits achieved by the previous player
when it switched players. Added the all-time
achievements section to the high scores dialog box. Now if you
score an achievement that you've never obtained
before and your score isn't high enough to make it in the high
scores list, you'll still get to log your achievement
as an "all-time" achievement. Whew! That was a lot of
code.... But it was worth it! Tomorrow. Levels, levels,
levels. I gotta finish up the levels. Armed with a digital camera,
I'll run around outside and shoot a bunch of
textures. Hopefully I'll get inspired!
10-8-99
Designed "Autumn". This included drawing all the artwork
and placing the bricks.
10-9-99
Tuned and finalized "Autumn". Tuned and Finalized "Capsule
Cage".
10-10-99
Day off.
10-11-99
Writing e-mails back and forth with Apple, trying to work out
a licensing agreement with Drawsprocket.
10-12-99
Still dealing with licensing issues. Started drawing the 4.0 splash
screen. Fixed a bug where the user's
all-time achievements sometimes wouldn't show up. Made the clam
shell appear a little sooner than before to make
the game a little more interesting... Updated the instruction
manual to reflect recent changes in the game.
10-14-99
Got an idea for a level involving this big machine that has....
Well... I don't want to spoil it. Began drawing the
7-segment displays that will be used on this mystery machine.
10-17-99
Drew a whole bunch of artwork for a cool techno level.
10-18-99
Incorporated yesterday's artwork into a new level. I'm calling
it, "Control Panel". Tested, tuned and finalized
"control panel". This level is quite cool. I'm thinking
of making it the last level in the game because it's
about as challenging as the last level as MacBrickout 3.x plus
the theme of the level will tie in nicely with the
game ending. Getting the urge to release the next (and hopefully
final) beta.
10-19-99
Played around with the level order. Made "Control Panel"
the last level. Added "C" key functionality. I think
I need one more level, then I need to massage the bonus levels.
They need some work. My ideas for the game
ending are coming together... FINALLY! There are still some loose
ends. Once those get tied up, the coding
should go pretty quickly. No bug reports from the beta testers.
10-20-99
Started working on treasure chest functionality. Got a demo of
"SpotLight" from Onyx Technology, Inc
(www.onyx-tech.com/). This program thoroughly monitors your application
and reports any potential memory leaks
that could cause the application to crash. I ran it on MacBrickout
and it found several "suspicious" memory
accesses, passing unlocked or NULL handles to toolbox routines,
etc. Started fixing all of these bugs.
Hey, SpotLight is pretty cool!
10-21-99
Treasure chest functionality completely drawn out on paper. Incorporated
different states in the coin engine.
Tomorrow, wall spawning plus I get to use "time = sqrt((2*height)/accel)".
10-22-99
Yay! Treasure chest functionality completed! Sampled 2 sounds
associated with the treasure chest. Implemented
the splash screen! Great progress today! Woo hoo!
10-23-99
Fixed a bug where coins that were stamped into the border wouldn't
appear there after you completed a level and
the next level was drawn.
10-24-99
Sampled some computer sounding sounds for the control panel level.
Imported them into the level, but then the
game would crash when it tried to draw the background. None of
my ASSERTs tripped. Hmmm. Thinking it was a
memory thing (the bkg is a full 640x480 pict), I increased the
memory requirements to 6megs. Still crashed.
Took one of the sounds out and then everything worked fine. There
might be a bug in the sound code where it's
overwriting the bounds of the memory allocated for the level sounds.
I'll have to look into it tomorrow. Changed
the color scheme for Bulls Eyes.
10-25-99
Added "10 hidden bricks" bonus level. Changed the gold
tile into a gold nugget. Two more bonus levels to go...
10-26-99
Made some changes to the text that appears in the green help window.
The text should pretty much be finalized now.
Fixed the sound bug I encountered a couple of days ago. I wasn't
setting the size of a handle correctly.
Successfully imported the new sound effects into the "Control
Panel" level.
10-27-99
Discovered that the full paddle range functionality for the bonus
levels had never been implemented. Fixed!
Created a "Don't touch the walls" bonus level. Argh.
can't-touch-walls functionality wasn't working either.
Fixed. Made some corrections to the level editor doc.
10-30-99
Found and fixed a ton of bugs that were causing incompatibilities
with DrawSprocket 1.7.2 (the one that ships
with OS9). I'm still seeing a little graphic glitch from time
to time. It looks like it happens right before a
ball hits a brick. I probably have missed one. Will check into
it tomorrow.
10-31-99
Updated the sound replacement numbers in the instruction manual.
They changed after I had added a bunch of sounds
to the game. Finished red-umphee ball mode. If you get the red
umphee ball when there's more than half of the
bricks left in the level, you'll only get to use the red umphee
ball until the end of the level. If less than
half of the bricks are left when you get the red umphee ball,
you'll get the use it for the entire next level.
Laser capsule was too rare. Made it fall a little more frequently.
Moved the pBall identifier into the top-right
corner of the screen. Tuned up all the original 3.x levels. They
new have fruits & vegitables as well as musical
bricks. Bonus levels are now correctly defined. Released Beta
8.
11-1-99
Tuned up final bonus level. Found and fixed a bug in the help
screen text display code. Some of the beta testers
reported some minor problems with beta-8. Fixed them. Fixed a
bug that showed up in a multiple monitor
situation. If you clicked "cancel" on the multiple monitor
dialog box, the game would crash. Duooh!
11-4-99
Found and fixed a bug where you would lose your pball mode if
you lost a ball on a bonus level.
11-5-99
Discovered that the 2-player mode was totally broken. Found and
fixed the bug. I don't understand how it ever
could have worked. I must have accidently deleted a line of code
at some point. Cleaned up and tested all of the
2-player code. Made it so "GOAL" isn't displayed on
bonus levels in 2-player mode. Some bonus levels have timers
which would overlap the goal. Updated the instruction manual with
some info about 2-player games.
11-6-99
That stubborn sound bug came back. Since I'm able to detect that
it happend, I added some code that would shut
down and reset that particular sound channel if the bug occurs.
That way people won't hear the annoying garble.
Modified "Hit the red triggers" slightly to increase
fun factor. Fixed a bug where the top-left corner of the
border didn't get drawn correctly when coins were stamped up there.
Doubled the clean sand bonus. Now it's
worth 40 times the number of bricks in a level. Made it a lot
easier to open the chest the 2nd time around.
11-8-99
Placed the remaining fruits and vegetables throughout the levels.
Added the juggling achievement badge. Had to
increase the size of the datastructures to accomidate the new
icon. Wow. Found and fixed a crash bug. I was
releasing memory after I was done with it, then later on, I was
releasing it again. The memory manager didn't
like that too much...
11-9-99
Increased the amount of time a bubble spends in the sand. Swapped
"Catch the Teleporter" and "Rainbow Road".
Rainbow Road is quite fun and I felt it should be moved up in
the level order. Created an ad banner that will go
up on a couple of the mac gaming websites.
11-10-99
Found a fixed a bug where any of the newly added achievements
wouldn't show up on the all-time achievements. I
had previously increased the size of the achievements bitfield
from a tU16 to a tU32 but had forgotten to make the
change for the all-time achievements.
11-11-99 to 11-18-99
Went on a very enjoyable vacation to Hope, Idaho.
11-19-99
Created a special version of MacBrickout for Fedde Middle School.
11-20-99
Made a new MacBrickout 4.0 web page. Went through the entire game,
removed all debugging stuff, checked all
functions and made sure the game is ready for release. Fixed a
bug where garbage would be displayed at the end
of the green help text. Created a new database for 4.0 registered
users. One of the achievement icons was too
big, causing garbage to be left on the screen when you option-clicked
a line in the high score dialog box. Changed
the size of that icon to eliminate the garbage. Fixed a bug where
a brick set to always drop a special capsule
would drop a capsule that looked like a ball (weird) in the unregistered
version. Now it defaults to an up/down
capsule. Found and fixed a bug in the registration form code.
Thanks Rick for helping me find that!
11-21-99
Released MacBrickout 4.0
11-22-99
Someone complained that their computer crashed (OS9) after saving
the registration form as a text file. I made
some changes to registration.cpp in hopes of eliminating that
problem. If DrawSprocket couldn't find a display
context (happens on some machines for some reason which I don't
understand. These machines are perfectly
capable of displaying a 640x480x16 context), MacBrickout would
crash with an error type 2 right when you tried to
launch it. I now handle this error correctly and display an error
dialog box for the user. I noticed that an
older version of DrawSprocket (version 1.1.4) has no problems
finding the context on these machines. Decided to
include 1.1.4 with MacBrickout instead of 1.7.2.
11-25-99
Put the proper sounds in the control panel level. They never made
it into the 4.0b release. Fixed a bug where
the frequent players option was available in the unregistered
version. Some people reported that they'd hear
a loud static sound and eventually MacBrickout would crash. Took
one long hard look at the sound code and found
a potential problem. It looks like the problem is being caused
by the linked list of sound channels being modified
by both the main code and the interrupt code. Changed it so only
the main code modifies the links in the list.
This should hopefully squash the sound bug.
11-26-99
Ran into a problem where invoking 2-player mode in the unregistered
version caused the user configuration dialog
box to pop up. Since the user configuration is only available
in the registered version, MacBrickout would
eventually get confused and all kinds of undesirable things would
happen. For the time being, I disabled 2-player
mode in the unregistered version. Once I have time to find an
elegant way to handle 2-player mode in the unregistered
version, I'll reimplement it. Adjusted the size of a static text
field in the bonus completion dialog. Released
4.0.1
12-1-99
Fixed a problem where the game would run VERY SLOW on some powerbooks.
The problem was due to DrawSprocket
returning a strange value for the monitor refresh rate on those
machines. I fixed it by detecting that strange
value (-32768) and returning 60 in that case (for 60 frames/sec).
12-2-99
Fixed a bug where player 2 didn't get their own "balls remaining"
value. They just what whatever player 1 had.
12-3-99
Made it so if you hit command-Q during a game, it pauses the game.
12-5-99
Fixed a bug where MacBrickout would change the textMode to srcCopy
on the main screen (qd.thePort) which would
cause the text to have little white boxes behind it in dialog
boxes of other programs that had non-white
backgrounds. Sheesh! Did that make any sense?
12-6-99
Fixed problem where paddle width wasn't handled correctly in 2-player
mode. Re-enabled 2-player mode in the
unregistered version. Made it so it doesn't bring up the select
player dialog box in 2-player mode in the
unregistered version. Instead, it just says, "Have a seat
Player 1" or "Have a seat Player 2".
12-7-99
Attempted to fix the bug where printing the registration form
on some machines crashes the machine. No go. I was
trying to create a SimpleText document, then send apple events
to the Finder, telling it to print it. That way
I wouldn't need any printing code in MacBrickout. Unfortunately,
it didn't work. More research needed...
12-8-99
Added an extra screen resolution. Now, at startup, you can hold
the control key for 640x480 resolution, the option
key for 832x624 resolution and the command key for 1024x768 resolution.
The MacBrickout play area is always
640x480 so at 832x624 and 1024x768, the play area will be centered
on your monitor. Fixed a problem where the
cursor would be missing when player 2 needed to enter their high
score.
12-15-99
Fixed the problem where some registered users couldn't save their
game. The problem only happened for people who
didn't set themselves up as a frequent player. I had forgotten
to put a LoadGame() call in the part of the code
that handles "New Game" from the FILE menu.
12-16-99
Fixed a bug where the highlight frame that appeared around bricks
when you clicked on them in the level editor
would appear in the wrong place on the screen when your monitor
was set to 832x624 or 1024x768 resolution.
12-17-99
Some of the levels in the 3.0 level set were out of order. Fixed.
Added some more all-time achievement gems.
The score bar wouldn't get drawn when you were in a mode other
than 640x480. Fixed.
12-26-99
Started fixing the bug where game wigs out if you pass all of
the bonus levels and then catch another bonus
capsule, then try to go to the "next" bonus level which
doesn't exist.
12-27-99
Worked on MacBrickout PC contract.
12-28-99
Signed contract with Kirk to do the PC version of MacBrickout.
Disabled gems in beginner mode. Started working
on fixing nearly 900 implicit arithmetic warnings in the code.
This is needed to satisfy the PC compiler.
12-29-99
Converted display.c to display.cpp. Fixed a whole bunch of implicit
arithemetic conversions. Went through all
the code and changed every reference to a CGrafPtr into a reference
to an ImageBuffer -- since the PC doesn't use
the CGrafPtr datastructure. ImageBuffer has all the info in it
that the Mac version needs and the PC version.
Whew. The game almost works again! It crashes between levels.
Will solve tomorrow!
12-30-99
Sent revised code containing ImageBuffer stuff to Kirk. Took private
functions out of Display.h. Moved prototypes
to display.cpp. Made cBonus::Spawn take a number, not a string.
Moved UserSetTexture() and DrawColors() out of
border.cpp and into LevelEdit.cpp.
12-31-99
made error.c and debug.c into error.cpp and debug.cpp.
1-1-00
Made it so the game stops dropping bonus capsules once the player
has finished all the bonus levels. Fixed a bug
where player 2 would get player 1's "re-spawned" warp
tunnel. Fixed a bug where if player 2 died after getting a
bonus capsule, player 1 would get to play the bonus level. Added
a feature to the sprite cutter where you can
replace an existing pict file in the project. This was needed
because the program couldn't find the PICT files
in their old locations (since I moved everything to a new machine
and the directory ID's were all different). So
now, I'm able to select "Replace Pict" from the project
menu and point the program to the new location of the
PICT. Recut the caged ball gem to fix some garbage that was showing
up in the high score dialog.
1-2-00
Investigated using inputSprocket to fix the paddle problems I'm
having (can't set paddle speed on USB systems and
on some systems the mouse is extremely fast after leaving MacBrickout).
InputSprocket seems way more complex than
it needs to be. I'm really reluctant to use it. Argh! Fixed the
problem where the game would freeze if the ball
got stuck in a tight place (like the small openings in level 19).
Now the ball detects that it is stuck and changes
its angle of travel automatically. Fixed a bug where passing the
final level on a non-factory level set would
prevent the user from recording their high scores.
1-3-00
Changed high score format so that scores are saved out in encrypted
format.
1-4-00
Added high score submit button to MacBrickout high scores dialog.
Added the dialog box that comes up after you
hit the submit button. Wrote code to convert high score data to
base 64 format. Wrote code to copy that data to
the clipboard. Wrote code on the server side to accept and process
user entered data. Made server spit out a
different html file if data is invalid. Got stuck on server side
code that opens and modifys files. Hmmm...
1-5-00
I needed to set the permissions on the files on the server. Once
I did that, everything worked. Finished writ-
ing the code for the high score submission. Made server keep track
of a table of high scores, inserting the new
score in the proper place. Wrote code for the server to display
the scores. Don't know quite what to do about
getting the server to display the bkg image (since it outputs
an html file on the fly). Gotta send some questions
out....
1-6-00
Figured out how to output the bkg image. I was just trying to
pull it out of the wrong directory on the server.
Made the high score list appear on the main MacBrickout page.
Got all the links working so people can submit their
scores and view them.
1-7-00
Added the ability to support multiple high score lists (one for
each authorized level set). This required doing
some major mods to the MacBrickout code so that the particular
level set identity could be sent out with the
encrypted high score data.
1-8-00
Made it so only one high score per registered user would get recorded.
Redesigned the website to use frames.
1-9-00
Got score table identity working. This means that people can get
a high score on any authorized level set and
the score will be placed in the correct high score table.
1-10-00
Ran into problems yesterday where a stale high score page would
come up. You would have to force reload the
high score page in order to see the most recent changes. Figured
out how to send html tags to make the page not
get cached. I now have a cgi program that spits out the entire
page. Added file locking code so that there
won't be any collisions between people reading the scores and
people submitting new scores. Imported all of the
bonus achievement icons to the website. Added compile flag to
turn level editor off. This will help in the
development of the PC version.
1-11-00
Got all of the achievement icons to work on the high score page.
Added comments field to high score submission
form. Wrote a cgi that would display the user's comments. Expanded
the datastructure to hold 512 characters of
comments. Made it so if the user has comments, their name would
be a hyperlink which would take you to their
comments.
1-12-00
Increased the bonus to 5,000 points for successfully using the
bubblegum ball. Got labels working so that you
go back to the correct high score list after viewing comments.
Made it so users can resubmit their high score
and change their comments.
1-17-00
Fixed a bug where a person would get a ruby after completing the
bonus level that said it gave you a blue
saphire.
1-18-00
Got all the game ending dialogs sorted out. The game was actually
displaying the wrong ones sometimes.
1-19-00
Encrypted map file. Made it so MacBrickout displays a warning
message to the user if they are about to edit a
level in an authorized level set. The warning tells them that
if they continue, they will no longer be able to
see the game ending if they finish all of the levels. Attempted
again to support InputSprocket. Failed.
Started working on revamping the Aim For Levels feature.
1-22-00
Fixed the crash bug finally. The sprite shadows weren't being
drawn correctly when they intersected the sand and
the right wall.
1-23-00
Got the new aim for levels working. I still need to be able to
group levels together so that the last level is
always played last (because it's in a different group).
1-24-00
Made the online high score list display a # sign in front of the
level when the user played in Aim For Levels mode.
Fixed a bug where finishing the game in AIM FOR LEVELS mode displayed
an incorrect game ending message.
1-25-00
Got the "unauthorized level set" message working in
the high score dialog. Disabled the submit button on
unauthorized sets (since there will be no high score list to submit
to).
1-27-00
Fixed a bug where your recently acquired fruit wouldn't get saved
when you saved your game.
1-28-00
Started working on flattening the saved files so that they would
work on both the PC and the Mac versions.
Fixed a problem where MacBrickout would sometimes unregister itself
due to a conflict with another program.
2-4-00
Released 4.0.2ß.
2-5-00
Fixed a bug where the clam shell was burried in the sand. Was
a side effect of fixing the crash bug with the
shadows.
2-12-00
Added a "Num Games Played" field to the online high
score list.
2-15-00
Think I fixed the bug where the timer sometimes wouldn't work
in the bonus levels. Looks like it had something
to do with the user saving a game. The number of ticks elapsed
would become invalid if they resumed the game
after shutting down the computer (causing TickCount() to reset).
2-21-00
Released version 4.0.2
3-1-00
Fixed a bug where a level set would become unauthorized as soon
as you played it in "thumbnail mode".
3-7-00
Fixed a bug where player 2 would start out with one extra ball.
3-15-00
Fixed an infinite loop bug in the sound code that occurred when
people added their own custom sounds.
3-19-00
MacBrickout is a more robust in handling a corrupted level map
file. Released 4.0.3.
4-25-00
Fixed a bug where random all-time achievements would show up when
you selected the all-time high score list
in the high score dialog. Fixed crash bug that occured when the
floating bonus points rose up off the top of
the screen. Made it so you can hit space bar to resume a paused
game. Fixed a bug where the bonus icons weren't
showing up in the right place when you completed a bonus level
and your display was set to a non 640x480 res-
olution. Fixed a bug in texture.cpp where the texture wouldn't
show up in the correct location of the texture
management dialog. Fixed a bug where you'd get a bonus completion
dialog on a regular level if you paused your
previous game on a bonus level and then started a new game.
5-9-00
Fixed a bug that prevented the chest full of coins from being
added to the person's achievements.
5-14-00
Added bonus gem description to Awards.html on the website. Made
it so you can click on a bonus gem in the high
score list and it'll take you right to that page. Fixed a bug
where once you got the gem of supremacy you would
not get anything after that. Now you get the gem of supremacy
each time you win the game since your initial
acquisition of the gem of supremacy. Released 4.0.4